Imported Upstream version 2~rc2+svn400
authorDimitrios Eftaxiopoulos <eftaxi12@otenet.gr>
Sun, 1 Apr 2012 02:59:38 +0000 (05:59 +0300)
committerDimitrios Eftaxiopoulos <eftaxi12@otenet.gr>
Sun, 1 Apr 2012 02:59:38 +0000 (05:59 +0300)
37 files changed:
examples/fltk_example.cpp
examples/full_test.cpp
examples/qt_example.cpp
include/mgl/base.h
include/mgl/canvas.h
include/mgl/canvas_cf.h
include/mgl/canvas_wnd.h
include/mgl/data.h
include/mgl/fltk.h
include/mgl/font.h
include/mgl/mgl.h
include/mgl/opengl.h
include/mgl/qt.h
include/mgl/window.h
lang/CMakeLists.txt
lang/mgl.i [deleted file]
lang/mgl.i.in [new file with mode: 0644]
lang/numpy.i [deleted file]
lang/numpy.i.in [new file with mode: 0644]
src/axis.cpp
src/base.cpp
src/canvas.cpp
src/canvas_cf.cpp
src/exec.cpp
src/export_3d.cpp
src/font.cpp
src/opengl.cpp
src/pixel.cpp
texinfo/core_en.texi
texinfo/core_ru.texi
texinfo/example_en.texi
texinfo/widget_en.texi
todo.txt
udav/udav_wnd.cpp
widgets/fltk.cpp
widgets/qt.cpp
widgets/window.cpp

index 0a34df0230aa41a987e3cc497834b04a455ed382..1f9d66a919c6fa532e3935403f728af1bb67a8b8 100644 (file)
@@ -38,17 +38,21 @@ int main(int argc,char **argv)
 #ifdef PTHREAD_SAMPLE\r
        mglWindow gr("test");\r
        gr.RunThr();\r
-       for(int i=0;i<10;i++)   // do calculation\r
+       for(int i=0;i<10;i++)   // do calculation\r
        {\r
-               sleep(1);             // which can be very long\r
+#ifdef WIN32\r
+               Sleep(1000);\r
+#else\r
+               sleep(1);           // which can be very long\r
+#endif\r
                pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1);\r
-               gr.Clf();             // make new drawing\r
+               gr.Clf();                       // make new drawing\r
                gr.Line(mglPoint(),pnt,"Ar2");\r
                char str[10] = "i=0";   str[3] = '0'+i;\r
                gr.Puts(mglPoint(),"");\r
-               gr.Update();       // update window\r
+               gr.Update();            // update window\r
        }\r
-       return 0;   // finish calculations and close the window\r
+       return 0;       // finish calculations and close the window\r
 #else\r
        mglWindow *gr;\r
        char key = 0;\r
index 5fec454156547718d7788ff9510805e06db6c090..b632fab9b87bcb39263abda3acfa16b938d72e00 100644 (file)
@@ -1317,7 +1317,7 @@ void smgl_vect(mglGraph *gr)
 //-----------------------------------------------------------------------------\r
 const char *mmgl_flow="subplot 2 2 0 '':title 'Flow plot (default)':box:flow a b\n"\r
 "subplot 2 2 1 '':title '\\\'v\\\' style':box:flow a b 'v'\n"\r
-"subplot 2 2 2 '':title 'from edges only':box:flow a b; value -5\n"\r
+"subplot 2 2 2 '':title 'from edges only':box:flow a b '#'\n"\r
 "subplot 2 2 3:title '3d variant':rotate 50 60:box:flow ex ey ez\n";\r
 void smgl_flow(mglGraph *gr)\r
 {\r
@@ -1326,7 +1326,7 @@ void smgl_flow(mglGraph *gr)
        gr->Box();      gr->Flow(a,b);\r
        if(mini)        return;\r
        gr->SubPlot(2,2,1,"");  gr->Title("'v' style"); gr->Box();      gr->Flow(a,b,"v");\r
-       gr->SubPlot(2,2,2,"");  gr->Title("from edges only");   gr->Box();      gr->Flow(a,b,"","value -5");\r
+       gr->SubPlot(2,2,2,"");  gr->Title("'\\#' style");       gr->Box();      gr->Flow(a,b,"#");\r
        mglData ex,ey,ez;       mgls_prepare3v(&ex,&ey,&ez);\r
        gr->SubPlot(2,2,3);     gr->Title("3d variant");        gr->Rotate(50,60);\r
        gr->Box();      gr->Flow(ex,ey,ez);\r
@@ -1334,16 +1334,16 @@ void smgl_flow(mglGraph *gr)
 //-----------------------------------------------------------------------------\r
 const char *mmgl_pipe="subplot 2 2 0 '':title 'Pipe plot (default)':light on:box:pipe a b\n"\r
 "subplot 2 2 1 '':title '\\\'i\\\' style':box:pipe a b 'i'\n"\r
-"subplot 2 2 2 '':title 'from edges only':box:pipe a b; value -5\n"\r
+"subplot 2 2 2 '':title 'from edges only':box:pipe a b '#'\n"\r
 "subplot 2 2 3:title '3d variant':rotate 50 60:box:pipe ex ey ez '' 0.1\n";\r
 void smgl_pipe(mglGraph *gr)\r
 {\r
        mglData a,b;    mgls_prepare2v(&a,&b);\r
-       if(!mini)       {gr->SubPlot(2,2,0,""); gr->Title("Flow plot (default)");}\r
+       if(!mini)       {gr->SubPlot(2,2,0,""); gr->Title("Pipe plot (default)");}\r
        gr->Light(true);        gr->Box();      gr->Pipe(a,b);\r
        if(mini)        return;\r
        gr->SubPlot(2,2,1,"");  gr->Title("'i' style"); gr->Box();      gr->Pipe(a,b,"i");\r
-       gr->SubPlot(2,2,2,"");  gr->Title("from edges only");   gr->Box();      gr->Pipe(a,b,"",0.05,"value -5");\r
+       gr->SubPlot(2,2,2,"");  gr->Title("'\\#' style");       gr->Box();      gr->Pipe(a,b,"#");\r
        mglData ex,ey,ez;       mgls_prepare3v(&ex,&ey,&ez);\r
        gr->SubPlot(2,2,3);     gr->Title("3d variant");        gr->Rotate(50,60);\r
        gr->Box();      gr->Pipe(ex,ey,ez,"",0.1);\r
@@ -1560,9 +1560,9 @@ void smgl_stereo(mglGraph *gr)
 {\r
        mglData a;      mgls_prepare2d(&a);\r
        gr->Light(true);\r
-       gr->SubPlot(2,1,0);     gr->Rotate(50,60+3);\r
+       gr->SubPlot(2,1,0);     gr->Rotate(50,60+1);\r
        gr->Box();      gr->Surf(a);\r
-       gr->SubPlot(2,1,1);     gr->Rotate(50,60-3);\r
+       gr->SubPlot(2,1,1);     gr->Rotate(50,60-1);\r
        gr->Box();      gr->Surf(a);\r
 }\r
 //-----------------------------------------------------------------------------\r
index bae26968d1564f495620370b7c26ff4364c11645..84abfb791828025b96e5ca82ddf8cb41b3672d68 100644 (file)
@@ -44,11 +44,15 @@ public:
 void Foo::Calc()\r
 {\r
        for(int i=0;i<30;i++)   // do calculation\r
-  {\r
-         sleep(1);           // which can be very long\r
-         pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1);\r
-         Gr->Update();        // update window\r
-  }\r
+       {\r
+#ifdef WIN32\r
+               Sleep(1000);\r
+#else\r
+               sleep(1);           // which can be very long\r
+#endif\r
+               pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1);\r
+               Gr->Update();        // update window\r
+       }\r
 }\r
 //-----------------------------------------------------\r
 int Foo::Draw(mglGraph *gr)\r
@@ -75,9 +79,9 @@ int main(int argc,char **argv)
        case '1':       gr = new mglWindow(sample_1,"1D plots",1);      break;\r
        case '2':       gr = new mglWindow(sample_2,"2D plots",1);      break;\r
        case '3':       gr = new mglWindow(sample_3,"3D plots",1);      break;\r
-       case 'd':       gr = new mglWindow(sample_d,"Dual plots",1);    break;\r
+       case 'd':       gr = new mglWindow(sample_d,"Dual plots",1);break;\r
        case 't':       gr = new mglWindow(test_wnd,"Testing",1);       break;\r
-       default:        gr = new mglWindow(&foo,"Drop and waves",1);    break;\r
+       default:        gr = new mglWindow(sample,"Drop and waves",1);  break;\r
        }\r
        gr->Run();      return 0;\r
 #endif\r
index eb59298512a826fe4daff602a6a8f9f349f0d084..d7fb9f711a47af0251005c3a77185609b6291af2 100644 (file)
@@ -109,7 +109,7 @@ struct mglPnt
 {\r
        float xx,yy,zz; // original coordinates\r
        float x,y,z;    // coordinates\r
-       float c,t;              // index in color scheme\r
+       float c,t,ta;   // index in color scheme\r
        float u,v,w;    // normales\r
        float r,g,b,a;  // RGBA color\r
        mglPnt()        {       xx=yy=zz=x=y=z=c=t=u=v=w=r=g=b=a=0;     }\r
@@ -145,9 +145,9 @@ struct mglTexture
        {       n=0;    Set(cols,smooth,alpha); }\r
        void Clear()    {       n=0;    }\r
        void Set(const char *cols, int smooth=0,float alpha=1);\r
-       void GetC(float u,float v,mglPnt &p);\r
-       bool IsSame(mglTexture &t);\r
-       void GetRGBA(unsigned char *f); // Write as BGRA for fastest export to TGA\r
+       void GetC(float u,float v,mglPnt &p) const;\r
+       bool IsSame(mglTexture &t) const;\r
+       void GetRGBA(unsigned char *f) const;   // Write as BGRA for fastest export to TGA\r
 };\r
 //-----------------------------------------------------------------------------\r
 const mglColor NC(-1,-1,-1);\r
@@ -188,7 +188,7 @@ public:
        long InUse;                     ///< Smart pointer (number of users)\r
        long Flag;                      ///< Flags for controlling drawing\r
 \r
-       inline bool get(long fl)        {       return Flag&fl; }\r
+       inline bool get(long fl) const  {       return Flag&fl; }\r
        inline void set(long fl)        {       Flag |= fl;     }\r
        inline void clr(long fl)        {       Flag &=~fl;     }\r
        inline void set(bool v,long fl) {       Flag = v ? Flag|fl : Flag&(~fl);        }\r
@@ -250,7 +250,7 @@ public:
        /// Set default palette\r
        inline void SetPalette(const char *colors)\r
        {       Txt[0].Set(mgl_have_color(colors)?colors:MGL_DEF_PAL,-1);       }\r
-       inline long GetNumPal(long id)  {       return Txt[abs(id)/256].n;      }\r
+       inline long GetNumPal(long id) const    {       return Txt[abs(id)/256].n;      }\r
        /// Set default color scheme\r
        inline void SetDefScheme(const char *colors)\r
        {       Txt[1].Set(mgl_have_color(colors)?colors:"BbcyrR");     }\r
@@ -266,7 +266,7 @@ public:
 \r
        /// Set warning code ant fill Message\r
        void SetWarn(int code, const char *who="");\r
-       int inline GetWarn()    {       return WarnCode;        }\r
+       int inline GetWarn() const      {       return WarnCode;        }\r
 \r
        virtual void StartAutoGroup (const char *)=0;\r
        void StartGroup(const char *name, int id);\r
@@ -293,13 +293,13 @@ public:
        inline void CopyFont(mglBase *gr)       {       fnt->Copy(gr->GetFont());       }\r
        /// Set default font size\r
        inline void SetFontSize(float val)      {       FontSize=val>0 ? val:FontSize*val;      }\r
-       inline float GetFontSize()              {       return FontSize;        };\r
-       inline float TextWidth(const wchar_t *text, const char *font, float size)\r
+       inline float GetFontSize() const        {       return FontSize;        };\r
+       inline float TextWidth(const wchar_t *text, const char *font, float size) const\r
        {       return (size<0?-size*FontSize:size)*font_factor*fnt->Width(text,(font&&*font)?font:FontDef)/8;  }\r
-       inline float TextHeight(const char *font, float size)\r
+       inline float TextHeight(const char *font, float size) const\r
        {       return (size<0?-size*FontSize:size)*font_factor*fnt->Height(font?font:FontDef)/8; }\r
-       inline float FontFactor()       {       return font_factor;     }\r
-       virtual float GetRatio();\r
+       inline float FontFactor() const         {       return font_factor;     }\r
+       virtual float GetRatio() const;\r
        /// Set to use or not text rotation\r
        inline void SetRotatedText(bool val)    {       set(val,MGL_ENABLE_RTEXT);      }\r
        /// Set default font style and color\r
@@ -317,7 +317,7 @@ public:
 \r
        /// Set plot quality\r
        virtual void SetQuality(int qual=MGL_DRAW_NORM) {       Quality=qual;   }\r
-       inline int GetQuality() {       return Quality; }\r
+       inline int GetQuality() const   {       return Quality; }\r
 \r
        // ~~~~~~~~~~~~~~~~~~~~~~ Developer functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
        /// Add point to the pntN and return its position\r
@@ -329,29 +329,29 @@ public:
        inline void SetReduceAcc(bool val)      {       set(val, MGL_REDUCEACC);        }\r
 \r
 //     inline long GetPos()    {       return Pnt.size()-1;    }\r
-       inline mglPoint GetPntP(long i)\r
+       inline mglPoint GetPntP(long i) const\r
        {       const mglPnt &p=Pnt[i]; return mglPoint(p.x,p.y,p.z);   }\r
-       inline float GetClrC(long i)    {       return Pnt[i].c;        }\r
-       inline long GetPntNum()                 {       return Pnt.size();      }\r
-       inline mglPnt &GetPnt(long i)   {       return Pnt[i];          }\r
-       inline mglPrim &GetPrm(long i)  {       return Prm[i];          }\r
-       inline long GetPrmNum()                 {       return Prm.size();      }\r
-       inline mglText &GetPtx(long i)  {       return Ptx[i];          }\r
-       inline long GetPtxNum()                 {       return Ptx.size();      }\r
-       inline mglTexture &GetTxt(long i){      return Txt[i];          }\r
-       inline long GetTxtNum()                 {       return Txt.size();      }\r
+       inline float GetClrC(long i) const      {       return Pnt[i].c;        }\r
+       inline const mglPnt &GetPnt(long i) const               {       return Pnt[i];          }\r
+       inline long GetPntNum() const           {       return Pnt.size();      }\r
+       inline mglPrim &GetPrm(long i)          {       return Prm[i];          }\r
+       inline long GetPrmNum() const           {       return Prm.size();      }\r
+       inline const mglText &GetPtx(long i) const              {       return Ptx[i];          }\r
+       inline long GetPtxNum() const           {       return Ptx.size();      }\r
+       inline const mglTexture &GetTxt(long i) const   {       return Txt[i];          }\r
+       inline long GetTxtNum() const           {       return Txt.size();      }\r
        /// Scale coordinates and cut off some points\r
-       virtual bool ScalePoint(mglPoint &p, mglPoint &n, bool use_nan=true);\r
+       virtual bool ScalePoint(mglPoint &p, mglPoint &n, bool use_nan=true) const;\r
 \r
-       virtual float GetOrgX(char dir)=0;      ///< Get Org.x (parse NAN value)\r
-       virtual float GetOrgY(char dir)=0;      ///< Get Org.y (parse NAN value)\r
-       virtual float GetOrgZ(char dir)=0;      ///< Get Org.z (parse NAN value)\r
+       virtual float GetOrgX(char dir) const=0;        ///< Get Org.x (parse NAN value)\r
+       virtual float GetOrgY(char dir) const=0;        ///< Get Org.y (parse NAN value)\r
+       virtual float GetOrgZ(char dir) const=0;        ///< Get Org.z (parse NAN value)\r
 \r
        /// Get color depending on single variable z, which should be scaled if scale=true\r
-       inline float GetC(long s,float z,bool scale = true)\r
+       inline float GetC(long s,float z,bool scale = true) const\r
        {       return s+(scale?GetA(z):(z>0?z/MGL_FLT_EPS:0)); }\r
        /// Get alpha value depending on single variable \a a\r
-       float GetA(float a);\r
+       float GetA(float a) const;\r
        /// Set pen/palette\r
        char SetPenPal(const char *stl, long *id=0);\r
        /// Add texture (like color scheme) and return the position of first color\r
index f435c4f3d2e4b87eeda1dd2540f0f3caa4b6e1c4..165c8b4f66b4cb14e523d60f7fbc6da8d70155b8 100644 (file)
@@ -37,7 +37,7 @@ struct mglMatrix
        float b[9];\r
        float x,y,z,pf;\r
        mglMatrix()     {       clear();        }\r
-       inline void clear()     {       x=y=z=pf=0;     memset(b,0,9*sizeof(float));    b[0]=b[4]=b[8]=1;       }\r
+       inline void clear()     {       x=y=z=0;        memset(b,0,9*sizeof(float));    b[0]=b[4]=b[8]=1;       }\r
        inline mglMatrix &operator=(mglMatrix &a)\r
        {       x=a.x;  y=a.y;  z=a.z;  pf=a.pf;        memcpy(b,a.b,9*sizeof(float));  return *this;   }\r
 };\r
@@ -112,7 +112,6 @@ class mglCanvas : public mglBase
 friend struct mglPrim;\r
 public:\r
 using mglBase::Light;\r
-       mglPoint LastMousePos;  ///< Last mouse position\r
 \r
        mglCanvas(int w=800, int h=600);\r
        virtual ~mglCanvas();\r
@@ -161,7 +160,7 @@ using mglBase::Light;
        /// Set size of frame in pixels. Normally this function is called internaly.\r
        virtual void SetSize(int w,int h);\r
        /// Get ratio (float width)/(float height).\r
-       float GetRatio();\r
+       float GetRatio() const;\r
        /// Get bitmap data prepared for saving to file\r
        virtual unsigned char **GetRGBLines(long &w, long &h, unsigned char *&f, bool alpha=false);\r
        /// Get RGB bitmap of current state image.\r
@@ -169,36 +168,36 @@ using mglBase::Light;
        /// Get RGBA bitmap of current state image.\r
        const unsigned char *GetRGBA()  {       Finish();       return G4;      }\r
        /// Get width of the image\r
-       int GetWidth()  {       return Width;   }\r
+       int GetWidth() const    {       return Width;   }\r
        /// Get height of the image\r
-       int GetHeight() {       return Height;  }\r
+       int GetHeight() const   {       return Height;  }\r
        /// Combine plots from 2 canvases. Result will be saved into this.\r
        void Combine(const mglCanvas *gr);\r
        /// Send graphical information to node id using MPI\r
        void MPI_Send(int id);\r
        /// Receive graphical information from node id using MPI\r
        void MPI_Recv(int id);\r
-       inline float GetDelay() {       return Delay;   }\r
+       inline float GetDelay() const   {       return Delay;   }\r
        inline void SetDelay(float d)   {       Delay=d;        }\r
 \r
        /// Calculate 3D coordinate {x,y,z} for screen point {xs,ys}\r
-       mglPoint CalcXYZ(int xs, int ys);\r
+       mglPoint CalcXYZ(int xs, int ys) const;\r
        /// Calculate screen point {xs,ys} for 3D coordinate {x,y,z}\r
-       void CalcScr(mglPoint p, int *xs, int *ys);\r
-       mglPoint CalcScr(mglPoint p);\r
+       void CalcScr(mglPoint p, int *xs, int *ys) const;\r
+       mglPoint CalcScr(mglPoint p) const;\r
        /// Set object/subplot id\r
        inline void SetObjId(long id)   {       ObjId = id;     }\r
        /// Get object id\r
-       inline int GetObjId(long x,long y)      {       return OI[x+Width*y];   }\r
+       inline int GetObjId(long x,long y) const        {       return OI[x+Width*y];   }\r
        /// Get subplot id\r
-       int GetSplId(long x,long y);\r
+       int GetSplId(long x,long y) const;\r
 \r
        /// Create new frame.\r
        virtual int NewFrame();\r
        /// Finish frame drawing\r
        virtual void EndFrame();\r
        /// Get the number of created frames\r
-       inline int GetNumFrame()        {       return CurFrameId;      }\r
+       inline int GetNumFrame() const  {       return CurFrameId;      }\r
        /// Reset frames counter (start it from zero)\r
        inline void ResetFrames()       {       CurFrameId=0;   DrwDat.clear(); }\r
 \r
@@ -345,7 +344,7 @@ protected:
        /// Clear ZBuffer only\r
        void ClfZB();\r
        /// Scale coordinates and cut off some points\r
-       bool ScalePoint(mglPoint &p, mglPoint &n, bool use_nan=true);\r
+       bool ScalePoint(mglPoint &p, mglPoint &n, bool use_nan=true) const;\r
        void LightScale();      ///< Additionally scale positions of light sources\r
 \r
        /// Push drawing data (for frames only). NOTE: can be VERY large\r
@@ -353,9 +352,9 @@ protected:
        /// Get drawing data for i-th frame.\r
        void GetDrwDat(long i);\r
 \r
-       float GetOrgX(char dir);        ///< Get Org.x (parse NAN value)\r
-       float GetOrgY(char dir);        ///< Get Org.y (parse NAN value)\r
-       float GetOrgZ(char dir);        ///< Get Org.z (parse NAN value)\r
+       float GetOrgX(char dir) const;  ///< Get Org.x (parse NAN value)\r
+       float GetOrgY(char dir) const;  ///< Get Org.y (parse NAN value)\r
+       float GetOrgZ(char dir) const;  ///< Get Org.z (parse NAN value)\r
 \r
        void mark_plot(long p, char type, float size=1);        // position in pntC\r
        void arrow_plot(long p1, long p2, char st);                     // position in pntC\r
@@ -375,6 +374,19 @@ protected:
        void glyph_draw(const mglPrim *P, mglDrawReg *d);\r
        bool IsSame(const mglPrim &pr,float wp,mglColor cp,int st);\r
 \r
+       // functions for multi-threading\r
+       void PreparePrim(bool fast);\r
+       void pxl_combine(unsigned long id, unsigned long n, const void *);\r
+       void pxl_memcpy(unsigned long id, unsigned long n, const void *);\r
+       void pxl_backgr(unsigned long id, unsigned long n, const void *);\r
+       void pxl_primdr(unsigned long id, unsigned long n, const void *);\r
+       void pxl_transform(unsigned long id, unsigned long n, const void *);\r
+       void pxl_setz(unsigned long id, unsigned long n, const void *);\r
+       void pxl_setz_adv(unsigned long id, unsigned long n, const void *);\r
+       void pxl_other(unsigned long id, unsigned long n, const void *p);\r
+       /// Put drawing from other mglCanvas (for multithreading, like subplots)\r
+       void PutDrawReg(mglDrawReg *d, const mglCanvas *gr);\r
+       \r
 private:\r
 //     float _tetx,_tety,_tetz;                // extra angles\r
        std::vector<mglMatrix> stack;   ///< stack for transformation matrixes\r
@@ -390,7 +402,7 @@ private:
        void tick_draw(mglPoint o, mglPoint d1, mglPoint d2, int f, const char *stl);\r
        /// Plot point \a p with color \a c\r
        void pnt_plot(long x,long y,float z,const unsigned char c[4]);\r
-       float FindOptOrg(char dir, int ind);\r
+       float FindOptOrg(char dir, int ind) const;\r
        /// Transform float color and alpha to bits format\r
        unsigned char* col2int(const mglPnt &p, unsigned char *r);\r
        /// Combine colors in 2 plane.\r
@@ -399,26 +411,15 @@ private:
        void fast_draw(long p1, long p2, mglDrawReg *d);\r
 \r
        /// Additionally scale points \a p for positioning in image\r
-       void PostScale(mglPoint &p);\r
+       void PostScale(mglPoint &p) const;\r
        /// Scale points \a p for projection to the face number \a nface in image\r
        long ProjScale(int nface, long p);\r
-       inline void PostScale(mglPoint *p,long n)       {       for(long i=0;i<n;i++)   PostScale(p[i]);        }\r
+       inline void PostScale(mglPoint *p,long n) const {       for(long i=0;i<n;i++)   PostScale(p[i]);        }\r
 \r
        // functions for glyph drawing\r
        void glyph_fill(const mglPnt &p, float f, int nt, const short *trig, mglDrawReg *d);\r
        void glyph_wire(const mglPnt &p, float f, int nl, const short *line, mglDrawReg *d);\r
        void glyph_line(const mglPnt &p, float f, bool solid, mglDrawReg *d);\r
-       // functions for multi-threading\r
-       void pxl_combine(unsigned long id, unsigned long n, const void *);\r
-       void pxl_memcpy(unsigned long id, unsigned long n, const void *);\r
-       void pxl_backgr(unsigned long id, unsigned long n, const void *);\r
-       void pxl_primdr(unsigned long id, unsigned long n, const void *);\r
-       void pxl_transform(unsigned long id, unsigned long n, const void *);\r
-       void pxl_setz(unsigned long id, unsigned long n, const void *);\r
-       void pxl_setz_adv(unsigned long id, unsigned long n, const void *);\r
-       void pxl_other(unsigned long id, unsigned long n, const void *p);\r
-       /// Put drawing from other mglCanvas (for multithreading, like subplots)\r
-       void PutDrawReg(mglDrawReg *d, const mglCanvas *gr);\r
 };\r
 //-----------------------------------------------------------------------------\r
 struct mglThreadG\r
index f432fa99cf00e01c1ddcbadc37fcc49d876825bd..a56aa6b61db1bb58d6684c4900bf2e39d1ebc9b6 100644 (file)
@@ -52,8 +52,6 @@ void mgl_axis_grid(HMGL gr, const char *dir,const char *pen);
 void mgl_label(HMGL gr, char dir, const char *text);\r
 void mgl_label_ext(HMGL gr, char dir, const char *text, float pos, float shift);\r
 void mgl_labelw_ext(HMGL gr, char dir, const wchar_t *text, float pos, float shift);\r
-void mgl_label_pos(HMGL gr, float x, float y, const char *text, const char *fnt);\r
-void mgl_labelw_pos(HMGL gr, float x, float y, const wchar_t *text, const char *fnt);\r
 \r
 void mgl_colorbar(HMGL gr, const char *sch);\r
 void mgl_colorbar_ext(HMGL gr, const char *sch, float x, float y, float w, float h);\r
@@ -89,7 +87,7 @@ void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png);
 void mgl_write_stl(HMGL gr, const char *fname,const char *descr);\r
 void mgl_write_off(HMGL gr, const char *fname,const char *descr, int colored);\r
 void mgl_write_xyz(HMGL gr, const char *fname,const char *descr);\r
-void mgl_write_x3d(HMGL gr, const char *fname,const char *descr);\r
+//void mgl_write_x3d(HMGL gr, const char *fname,const char *descr);\r
 void mgl_write_wgl(HMGL gr, const char *fname,const char *descr);\r
 void mgl_write_idtf(HMGL gr, const char *fname,const char *descr);\r
 void mgl_write_gif(HMGL gr, const char *fname,const char *descr);\r
@@ -135,6 +133,7 @@ void mgl_gridplot(HMGL gr, int nx, int ny, int m, float d);
 void mgl_stickplot(HMGL gr, int num, int ind, float tet, float phi);\r
 void mgl_title(HMGL gr, const char *title, const char *stl, float size);\r
 void mgl_titlew(HMGL gr, const wchar_t *title, const char *stl, float size);\r
+void mgl_set_plotfactor(HMGL gr, float val);\r
 \r
 void mgl_aspect(HMGL gr, float Ax,float Ay,float Az);\r
 void mgl_rotate(HMGL gr, float TetX,float TetZ,float TetY);\r
@@ -168,7 +167,6 @@ void mgl_axis_(uintptr_t *gr, const char *dir, const char *stl,int,int);
 void mgl_axis_grid_(uintptr_t *gr, const char *dir,const char *pen,int l,int n);\r
 void mgl_label_(uintptr_t *gr, const char *dir, const char *text,int,int l);\r
 void mgl_label_ext_(uintptr_t *gr, const char *dir, const char *text, float *pos, float *shift,int,int l);\r
-void mgl_label_pos_(uintptr_t *gr, float *x, float *y, const char *txt, const char *fnt,int l,int n);\r
 /*****************************************************************************/\r
 void mgl_colorbar_(uintptr_t *gr, const char *sch,int l);\r
 void mgl_colorbar_ext_(uintptr_t *gr, const char *sch, float *x, float *y, float *w, float *h, int l);\r
@@ -203,8 +201,7 @@ void mgl_write_obj_(uintptr_t *graph, const char *fname,const char *descr, int *
 void mgl_write_stl_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld);\r
 void mgl_write_off_(uintptr_t *graph, const char *fname,const char *descr,int *colored,int lf,int ld);\r
 void mgl_write_xyz_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld);\r
-void mgl_write_wrl_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld);\r
-void mgl_write_x3d_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld);\r
+//void mgl_write_x3d_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld);\r
 void mgl_write_tex_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld);\r
 void mgl_write_wgl_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld);\r
 void mgl_set_plotid_(uintptr_t *gr, const char *id,int l);\r
@@ -252,6 +249,7 @@ void mgl_relplot_(uintptr_t *graph, float *x1,float *x2,float *y1,float *y2);
 void mgl_columnplot_(uintptr_t *graph, int *num, int *i, float *d);\r
 void mgl_gridplot_(uintptr_t *graph, int *nx, int *ny, int *i, float *d);\r
 void mgl_stickplot_(uintptr_t *graph, int *num, int *i, float *tet, float *phi);\r
+void mgl_set_plotfactor_(uintptr_t *graph, float *val);\r
 \r
 void mgl_title_(uintptr_t *gr, const char *title, const char *stl, float *size, int,int);\r
 void mgl_aspect_(uintptr_t *graph, float *Ax,float *Ay,float *Az);\r
@@ -263,6 +261,7 @@ void mgl_perspective_(uintptr_t *graph, float val);
 /*****************************************************************************/\r
 HMGL mgl_create_graph_qt(int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*load)(void *p));\r
 HMGL mgl_create_graph_fltk(int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*load)(void *p));\r
+void mgl_set_click_func(HMGL gr, void (*func)(void *p));\r
 int mgl_fltk_run();\r
 int mgl_fltk_thr();\r
 int mgl_qt_run();\r
index 4c2d01e531c67af6bb1d2dfbfd82d26da0121482..34bf90c3663008898018c833739984ad8706985d 100644 (file)
 class mglCanvasWnd : public mglCanvas\r
 {\r
 public:\r
+       mglPoint LastMousePos;                  ///< Last mouse position\r
+       void (*ClickFunc)(void *par);   ///< Callback function on click\r
+\r
        mglCanvasWnd();\r
        virtual ~mglCanvasWnd();\r
 \r
        void SetSize(int w,int h);\r
        void EndFrame();\r
        const unsigned char *GetBits();\r
-       inline int GetNumFig()  {       return NumFig;  }\r
-       inline int GetCurFig()  {       return CurFig;  }\r
+       inline int GetNumFig() const    {       return NumFig;  }\r
+       inline int GetCurFig() const    {       return CurFig;  }\r
        void SetCurFig(int c);\r
        void ClearFrames();\r
-       inline mglPoint GetMousePos()   {       return LastMousePos;}\r
+       inline mglPoint GetMousePos() const     {       return LastMousePos;}\r
        inline void SetMousePos(mglPoint p)     {       LastMousePos=p; }\r
        inline void Setup(bool clf_upd=true, bool showpos=false)\r
        {       set(showpos,MGL_SHOW_POS);      set(clf_upd,MGL_CLF_ON_UPD);    }\r
@@ -59,9 +62,8 @@ public:
                                                const char *title, void *par=NULL,\r
                                                void (*reload)(void *p)=NULL, bool maximize=false)=0;\r
        void SetDrawFunc(int (*draw)(mglBase *gr, void *p), void *par=NULL, void (*reload)(void *p)=NULL);\r
-\r
+       \r
 private:\r
-       mglPoint LastMousePos;  ///< Last mouse position\r
        int CurFig;             ///< Current figure in the list.\r
 \r
        unsigned char *GG;      ///< images for all frames (may be too LARGE !!!)\r
index bfce511f8664f02a0256e8d1309a9f40f988274e..824fdf4c7ae63f7deba801d614a0042191882889 100644 (file)
@@ -42,7 +42,7 @@ public:
        inline mglData(const mglData &d)        {       a=0;    mgl_data_set(this,&d);          }\r
        inline mglData(const mglDataA *d)       {       a=0;    mgl_data_set(this, d);          }\r
        inline mglData(bool, mglData *d)        // NOTE: Variable d will be deleted!!!\r
-       {       if(d)   {memcpy(this,d,sizeof(mglData));        d->id=0;        d->link=true;   delete d;       }\r
+       {       if(d)   {memcpy((void*)this,(void*)d,sizeof(mglData));  d->id=0;        d->link=true;   delete d;       }\r
                else    {       a=0;    Create(1);      }       }\r
        /// Initiate by flat array\r
        inline mglData(int size, const float *d)        {       a=0;    Set(d,size);    }\r
index 72abf463da70029b9786cadde29992d605347efd..d503ab33800db1c31ae3723ffc1fff779a2bab98 100644 (file)
@@ -23,6 +23,7 @@
 /*****************************************************************************/\r
 #ifdef __cplusplus\r
 #include "mgl/canvas_wnd.h"\r
+#if MGL_HAVE_FLTK\r
 //-----------------------------------------------------------------------------\r
 #ifdef __MWERKS__\r
 # define FL_DLL\r
@@ -165,5 +166,8 @@ using mglCanvasWnd::Window;
 //-----------------------------------------------------------------------------\r
 void mgl_ask_fltk(const wchar_t *quest, wchar_t *res);\r
 //-----------------------------------------------------------------------------\r
+#else\r
+#error "Please enable FLTK support"\r
+#endif\r
 #endif\r
 #endif\r
index 7ad612ae7991eafe9808dd36d33bdabee3a8bfdb..0335616200ee4833229caa3f32c3fbe1aa0f3366 100644 (file)
@@ -44,8 +44,8 @@
 #define MGL_DEF_FONT_NAME      "STIX"\r
 #endif\r
 //-----------------------------------------------------------------------------\r
-struct mglTeXsymb      {       unsigned kod;   const wchar_t *tex;     };
-/// Get font color, style and align for internal parser
+struct mglTeXsymb      {       unsigned kod;   const wchar_t *tex;     };\r
+/// Get font color, style and align for internal parser\r
 char mglGetStyle(const char *how, int *font, int *align=0);\r
 class mglBase;\r
 //-----------------------------------------------------------------------------\r
@@ -61,35 +61,35 @@ public:
        /// Load font data to memory. Normally used by constructor.\r
        bool Load(const char *base, const char *path=0);\r
        /// Free memory\r
-       void Clear();
+       void Clear();\r
        /// Copy data from other font\r
        void Copy(mglFont *);\r
        /// Restore default font\r
        void Restore();\r
        /// Return true if font is loaded\r
-       inline bool Ready()     {       return numg!=0; };\r
+       inline bool Ready() const       {       return numg!=0; };\r
 \r
        /// Get height of text\r
-       float Height(int font);\r
+       float Height(int font) const;\r
        /// Get height of text\r
-       float Height(const char *how);\r
+       float Height(const char *how) const;\r
        /// Print text string for font specified by string\r
-       float Puts(const char *str,const char *how,float col);\r
+       float Puts(const char *str,const char *how,float col) const;\r
        /// Get width of text string for font specified by string\r
-       float Width(const char *str,const char *how);\r
+       float Width(const char *str,const char *how) const;\r
        /// Print text string for font specified by string\r
-       float Puts(const wchar_t *str,const char *how,float col);\r
+       float Puts(const wchar_t *str,const char *how,float col) const;\r
        /// Get width of text string for font specified by string\r
-       float Width(const wchar_t *str,const char *how);
+       float Width(const wchar_t *str,const char *how) const;\r
 \r
        /// Return number of glyphs\r
-       inline unsigned GetNumGlyph()   {       return numg;    };\r
+       inline unsigned GetNumGlyph() const     {       return numg;    };\r
        /// Return some of pointers\r
-       inline const short *GetTr(int s, long j)        {       return Buf+tr[s][j];    };\r
-       inline const short *GetLn(int s, long j)        {       return Buf+ln[s][j];    };\r
-       inline int GetNt(int s, long j) {       return numt[s][j];      };\r
-       inline int GetNl(int s, long j) {       return numl[s][j];      };\r
-       inline float GetFact(int s)             {       return fact[s]; };\r
+       inline const short *GetTr(int s, long j) const  {       return Buf+tr[s][j];    };\r
+       inline const short *GetLn(int s, long j) const  {       return Buf+ln[s][j];    };\r
+       inline int GetNt(int s, long j) const   {       return numt[s][j];      };\r
+       inline int GetNl(int s, long j) const   {       return numl[s][j];      };\r
+       inline float GetFact(int s) const               {       return fact[s]; };\r
 protected:\r
        wchar_t *id;            ///< Unicode ID for glyph\r
        unsigned *tr[4];        ///< Shift of glyph description by triangles (for solid font)\r
@@ -101,32 +101,32 @@ protected:
        unsigned numg;          ///< Number of glyphs\r
        short *Buf;                     ///< Buffer for glyph descriptions\r
        long numb;                      ///< Buffer size\r
-
+\r
        /// Print text string for font specified by integer constant\r
-       float Puts(const wchar_t *str,int font,int align, float col);\r
+       float Puts(const wchar_t *str,int font,int align, float col) const;\r
        /// Get width of text string for font specified by integer constant\r
-       float Width(const wchar_t *str,int font=0);\r
+       float Width(const wchar_t *str,int font=0) const;\r
        /// Replace TeX symbols by its UTF code and add font styles\r
-       void Convert(const wchar_t *str, unsigned *res);\r
-
+       void Convert(const wchar_t *str, unsigned *res) const;\r
+\r
        /// Draw string recursively\r
        /* x,y - position, f - factor, style: 0x1 - italic, 0x2 - bold, 0x4 - overline, 0x8 - underline, 0x10 - empty (not draw) */\r
-       float Puts(const unsigned *str, float x,float y,float f,int style,float col);\r
+       float Puts(const unsigned *str, float x,float y,float f,int style,float col) const;\r
        /// Parse LaTeX command\r
-       unsigned Parse(const wchar_t *s);\r
+       unsigned Parse(const wchar_t *s) const;\r
        /// Get internal code for symbol\r
-       long Internal(unsigned s);\r
+       long Internal(unsigned s) const;\r
 \r
        /// Get symbol for character \a ch with given \a font style\r
-       unsigned Symbol(char ch);\r
+       unsigned Symbol(char ch) const;\r
 private:\r
-       float get_ptr(long &i,unsigned *str, unsigned **b1, unsigned **b2,float &w1,float &w2, float f1, float f2, int st);\r
+       float get_ptr(long &i,unsigned *str, unsigned **b1, unsigned **b2,float &w1,float &w2, float f1, float f2, int st) const;\r
        bool read_data(const char *fname, float *ff, short *wdt, short *numl, unsigned *posl, short *numt, unsigned *post, unsigned &cur);\r
        void main_copy();\r
        bool read_main(const char *fname, unsigned &cur);\r
        void mem_alloc();\r
        bool read_def(unsigned &cur);\r
-       void draw_ouline(int st, float x, float y, float f, float g, float ww, float ccol);\r
+       void draw_ouline(int st, float x, float y, float f, float g, float ww, float ccol) const;\r
 };\r
 //-----------------------------------------------------------------------------\r
 #endif\r
index 5c89e9357dbacb985e5a6bc8e325fdc802e6df18..2bd12d3d5ec16d3a42b47715cb1757596060a92b 100644 (file)
@@ -221,6 +221,14 @@ public:
        inline void StickPlot(int num, int i, float tet, float phi)\r
        {       mgl_stickplot(gr,num,i,tet,phi);        }\r
 \r
+       /// Set PlotFactor\r
+       inline void SetPlotFactor(float val)\r
+       {       mgl_set_plotfactor(gr,val);     }\r
+       /// Push transformation matrix into stack\r
+       inline void Push()      {       mgl_mat_push(gr);       }\r
+       /// Pop transformation matrix from stack\r
+       inline void Pop()       {       mgl_mat_pop(gr);        }\r
+       \r
        /// Add title for current subplot/inplot\r
        inline  void Title(const char *title,const char *stl="",float size=-2)\r
        {       mgl_title(gr,title,stl,size);   }\r
@@ -453,11 +461,6 @@ public:
        {       mgl_putsw_dir(gr, p.x, p.y, p.z, d.x, d.y, d.z, text, font, size);      }\r
        inline void Puts(mglPoint p, mglPoint d, const char *text, const char *font=":L", float size=-1)\r
        {       mgl_puts_dir(gr, p.x, p.y, p.z, d.x, d.y, d.z, text, font, size);       }\r
-       /// Print the label \a text at arbitrary position {x,y} of plot.\r
-       void Label(double x, double y, const char *text, const char *fnt=0)\r
-       {       mgl_label_pos(gr,x,y,text,fnt); }\r
-       void Label(double x, double y, const wchar_t *text, const char *fnt=0)\r
-       {       mgl_labelw_pos(gr,x,y,text,fnt);        }\r
 \r
        /// Print text along the curve\r
        inline void Text(const mglDataA &x, const mglDataA &y, const mglDataA &z, const char *text, const char *font="", const char *opt="")\r
index 2245a36b998214e4565b298fc2b88e96d3ec56cc..241c6c9c72bfcd81f3553e95998a54e51f2c498a 100644 (file)
@@ -30,7 +30,7 @@ public:
        ~mglCanvasGL();\r
 \r
        void SetQuality(int =0) {       Quality=2;      }\r
-       void Finish();\r
+       void Finish(bool fast=true);\r
        void SetSize(int ,int ) {}\r
        void View(float tetX,float tetY,float tetZ);\r
        int NewFrame();\r
index 17e906e1f82fb206826f4a3e8098a7aec44f335b..e1f590de10b57d4fc5139f61e45a19c53755c1f2 100644 (file)
@@ -23,6 +23,7 @@
 #ifdef __cplusplus\r
 //-----------------------------------------------------------------------------\r
 #include "mgl/canvas_wnd.h"\r
+#if MGL_HAVE_QT\r
 #include <QtGui/QWidget>\r
 #include <QtGui/QPixmap>\r
 //-----------------------------------------------------------------------------\r
@@ -107,7 +108,7 @@ public slots:
        void exportOBJ(QString fname="");       ///< export to OBJ file\r
        void exportSTL(QString fname="");       ///< export to STL file\r
        void exportOFF(QString fname="");       ///< export to OFF file\r
-       void exportX3D(QString fname="");       ///< export to XYZ file\r
+//     void exportX3D(QString fname="");       ///< export to XYZ file\r
        void exportIDTF(QString fname="");      ///< export to IDTF file\r
        void setMGLFont(QString path);          ///< restore/load font for graphics\r
 \r
@@ -214,5 +215,8 @@ QMenu *mglMakeMenu(QMainWindow *Wnd, QMathGL *QMGL, QSpinBox *tet, QSpinBox *phi
 //-----------------------------------------------------------------------------\r
 void mgl_ask_qt(const wchar_t *quest, wchar_t *res);\r
 //-----------------------------------------------------------------------------\r
+#else\r
+#error "Please enable Qt support"\r
+#endif\r
 #endif\r
 #endif\r
index e46497f62b4b8719f01c4fac38730941626bab35..ba1d3f9a7d926a6fc6a8fe4b6a38a2154b31750e 100644 (file)
@@ -29,6 +29,7 @@ struct mglDraw
 {\r
        virtual int Draw(mglGraph *)=0; ///< Function for drawing\r
        virtual void Reload()   {}              ///< Function for reloading data\r
+       virtual void Click()    {}              ///< Callback function on mouse click\r
 #if MGL_HAVE_PTHREAD\r
        pthread_t thr;\r
        bool running;\r
@@ -42,6 +43,7 @@ typedef int (*draw_func)(mglGraph *gr);
 int mgl_draw_graph(mglBase *gr, void *p);\r
 // NOTE: mgl_draw_class() and mgl_draw_load() use mglWindow* only. Don't use it with inherited classes\r
 int mgl_draw_class(mglBase *gr, void *p);\r
+void mgl_click_class(void *p);\r
 void mgl_reload_class(void *p);\r
 //-----------------------------------------------------------------------------\r
 #if MGL_HAVE_QT\r
@@ -53,6 +55,7 @@ void mgl_reload_class(void *p);
 class mglWindow : public mglGraph\r
 {\r
 friend int mgl_draw_class(mglBase *gr, void *p);\r
+friend void mgl_click_class(void *p);\r
 friend void mgl_reload_class(void *p);\r
 protected:\r
        mglDraw *dr;\r
@@ -80,6 +83,7 @@ public:
                wnd=kind;       dr=draw;\r
                if(wnd==1)      gr = mgl_create_graph_qt(mgl_draw_class,title,this,mgl_reload_class);\r
                else            gr = mgl_create_graph_fltk(mgl_draw_class,title,this,mgl_reload_class);\r
+               mgl_set_click_func(gr, mgl_click_class);\r
        }\r
        inline int Run()                        ///< Run main loop for event handling\r
        {       return (wnd==1)? mgl_qt_run() : mgl_fltk_run(); }\r
@@ -107,6 +111,8 @@ public:
        {       mgl_wnd_prev_frame(gr); }\r
        inline void Animation()         ///< Run slideshow (animation) of frames\r
        {       mgl_wnd_animation(gr);  }\r
+       void SetClickFunc(void (*func)(void *p))\r
+       {       if(!dr) mgl_set_click_func(gr,func);    }\r
 \r
        inline void SetDelay(float dt)  ///< Delay for animation in seconds\r
        {       mgl_wnd_set_delay(gr, dt);      }\r
index 0db2473f40ff162d26cfc2f32636c75eff1dc48e..6b0617bb8cb7a6c1f4be52f032befc81779897c1 100644 (file)
@@ -1,6 +1,6 @@
 if(MGL_HAVE_PYTHON)
-       configure_file(${MathGL_SOURCE_DIR}/lang/mgl.i ${MathGL_BINARY_DIR}/lang/mgl.i COPYONLY)
-       configure_file(${MathGL_SOURCE_DIR}/lang/numpy.i ${MathGL_BINARY_DIR}/lang/numpy.i COPYONLY)
+       configure_file(${MathGL_SOURCE_DIR}/lang/mgl.i.in ${MathGL_BINARY_DIR}/lang/mgl.i COPYONLY)
+       configure_file(${MathGL_SOURCE_DIR}/lang/numpy.i.in ${MathGL_BINARY_DIR}/lang/numpy.i COPYONLY)
        SET(dep_libs mgl)
 #      if(MGL_HAVE_FLTK)
                get_property(path_to_mglwnd TARGET mgl-wnd PROPERTY LOCATION)
@@ -36,5 +36,5 @@ if(MGL_HAVE_PYTHON)
        )
        add_custom_target(mgl_python_module ALL DEPENDS _mathgl.so mathgl.py)
        install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/lang/setup.py install --prefix=${CMAKE_INSTALL_PREFIX} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/lang )")
-       set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "mgl.i;numpy.i;setup.py;mgl_wrap.cpp;build;mathgl.pyc")
+       set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "setup.py;mgl_wrap.cpp;build;mathgl.pyc")
 endif(MGL_HAVE_PYTHON)
diff --git a/lang/mgl.i b/lang/mgl.i
deleted file mode 100644 (file)
index 3e1e112..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/***************************************************************************
- * mgl.i is part of Math Graphic Library
- * Copyright (C) 2007 Alexey Balakin <balakin@appl.sci-nnov.ru>,
- *   Xavier Delacour <xavier.delacour@gmail.com>,
- *   Alexander Filov <alexander.filov@gmail.com>                           *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
- ***************************************************************************/
-
-%module mathgl
-#ifdef SWIGOCTAVE
-%feature("autodoc", 1);
-#endif // SWIGOCTAVE
-
-%ignore operator!;
-%ignore operator=;
-%ignore *::operator=;
-%ignore *::operator+=;
-%ignore *::operator-=;
-%ignore *::operator*=;
-%ignore *::operator/=;
-//%ignore mglDataA
-
-%{
-#define SWIG_FILE_WITH_INIT
-#include "mgl/config.h"
-#include "mgl/type.h"
-#include "mgl/data.h"
-#include "mgl/mgl.h"
-#include "mgl/window.h"
-%}
-
-#if MGL_USE_DOUBLE
-typedef double mreal;
-#else
-typedef float mreal;
-#endif
-
-
-#ifdef SWIGOCTAVE
-%rename(__add) operator+;
-%rename(__sub) operator-;
-%rename(__mul) operator*;
-%rename(__div) operator/;
-%rename(__eq) operator==;
-%rename(__ne) operator!=;
-//%typemap(in,noblock=1) (double* d, int rows, int cols) (Matrix tmp) {
-//     if (!$input.is_matrix_type()) {
-//             error("A must be a matrix");
-//     SWIG_fail;
-//     }
-//     tmp=$input.matrix_value();
-//     $1=tmp.data();
-//     $2=tmp.rows();
-//     $3=tmp.columns();
-//}
-#endif
-
-#ifdef SWIGPYTHON
-%rename(__add__) *::operator+(const mglData&, const mglData&);
-%rename(__sub__) *::operator-(const mglData&, const mglData &);
-%rename(__mul__) *::operator*(const mglData &, float);
-%rename(__div__) *::operator/(const mglData &, float);
-
-// Get the NumPy typemaps
-%include "numpy.i"
-%init %{
-import_array();
-%}
-%apply (double* IN_ARRAY1, int DIM1) {(const double* d, int size)};
-%apply (int DIM1, double* IN_ARRAY1) {(int size, const double* d)};
-%apply (double* IN_ARRAY2, int DIM1, int DIM2) {(const double* d, int rows, int cols)};
-%apply (int DIM1, int DIM2, double* IN_ARRAY2) {(int rows, int cols, const double* d)};
-%apply (double* IN_ARRAY3, int DIM1, int DIM2, int DIM3) {(const double* d, int rows, int cols, int slc)};
-%apply (int DIM1, int DIM2, int DIM3, double* IN_ARRAY3) {(int rows, int cols, int slc, const double* d)};
-#endif
-
-%include "mgl/config.h"
-%include "mgl/type.h"
-%include "mgl/data.h"
-%include "mgl/mgl.h"
-%include "mgl/window.h"
-%extend mglData
-{
-       float __getitem__( int i)       {       return self->GetVal(i); };
-       float __paren( int i)           {       return self->GetVal(i); };
-       void __setitem__( int i, float y)       {       self->SetVal(y,i);      };
-       void __paren_asgn( int i, float y)      {       self->SetVal(y,i);      };
-};
diff --git a/lang/mgl.i.in b/lang/mgl.i.in
new file mode 100644 (file)
index 0000000..f7dd192
--- /dev/null
@@ -0,0 +1,102 @@
+/***************************************************************************
+ * mgl.i is part of Math Graphic Library
+ * Copyright (C) 2007 Alexey Balakin <balakin@appl.sci-nnov.ru>,
+ *   Xavier Delacour <xavier.delacour@gmail.com>,
+ *   Alexander Filov <alexander.filov@gmail.com>                           *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ ***************************************************************************/
+
+%module mathgl
+#ifdef SWIGOCTAVE
+%feature("autodoc", 1);
+#endif // SWIGOCTAVE
+
+%ignore operator!;
+%ignore operator=;
+%ignore *::operator=;
+%ignore *::operator+=;
+%ignore *::operator-=;
+%ignore *::operator*=;
+%ignore *::operator/=;
+//%ignore mglDataA
+
+%{
+#define SWIG_FILE_WITH_INIT
+//#include "mgl/config.h"
+#include "mgl/type.h"
+#include "mgl/data.h"
+#include "mgl/mgl.h"
+#include "mgl/window.h"
+%}
+
+#if MGL_USE_DOUBLE
+typedef double mreal;
+#else
+typedef float mreal;
+#endif
+
+
+#ifdef SWIGOCTAVE
+%rename(__add) operator+;
+%rename(__sub) operator-;
+%rename(__mul) operator*;
+%rename(__div) operator/;
+%rename(__eq) operator==;
+%rename(__ne) operator!=;
+//%typemap(in,noblock=1) (double* d, int rows, int cols) (Matrix tmp) {
+//     if (!$input.is_matrix_type()) {
+//             error("A must be a matrix");
+//     SWIG_fail;
+//     }
+//     tmp=$input.matrix_value();
+//     $1=tmp.data();
+//     $2=tmp.rows();
+//     $3=tmp.columns();
+//}
+#endif
+
+#ifdef SWIGPYTHON
+%rename(__add__) *::operator+(const mglData&, const mglData&);
+%rename(__sub__) *::operator-(const mglData&, const mglData &);
+%rename(__mul__) *::operator*(const mglData &, float);
+%rename(__div__) *::operator/(const mglData &, float);
+
+// Get the NumPy typemaps
+%include "numpy.i"
+%init %{
+import_array();
+%}
+%apply (double* IN_ARRAY1, int DIM1) {(const double* d, int size)};
+%apply (int DIM1, double* IN_ARRAY1) {(int size, const double* d)};
+%apply (double* IN_ARRAY2, int DIM1, int DIM2) {(const double* d, int rows, int cols)};
+%apply (int DIM1, int DIM2, double* IN_ARRAY2) {(int rows, int cols, const double* d)};
+%apply (double* IN_ARRAY3, int DIM1, int DIM2, int DIM3) {(const double* d, int rows, int cols, int slc)};
+%apply (int DIM1, int DIM2, int DIM3, double* IN_ARRAY3) {(int rows, int cols, int slc, const double* d)};
+#endif
+
+//%include "mgl/config.h"
+%include "mgl/type.h"
+%include "mgl/data.h"
+%include "mgl/mgl.h"
+%include "mgl/window.h"
+%extend mglData
+{
+       float __getitem__( int i)       {       return self->GetVal(i); };
+       float __paren( int i)           {       return self->GetVal(i); };
+       void __setitem__( int i, float y)       {       self->SetVal(y,i);      };
+       void __paren_asgn( int i, float y)      {       self->SetVal(y,i);      };
+};
diff --git a/lang/numpy.i b/lang/numpy.i
deleted file mode 100644 (file)
index 25d1f1a..0000000
+++ /dev/null
@@ -1,1634 +0,0 @@
-/* -*- C -*-  (not really, but good for syntax highlighting) */
-#ifdef SWIGPYTHON
-
-%{
-#ifndef SWIG_FILE_WITH_INIT
-#  define NO_IMPORT_ARRAY
-#endif
-#include "stdio.h"
-#include <numpy/arrayobject.h>
-%}
-
-/**********************************************************************/
-
-%fragment("NumPy_Backward_Compatibility", "header")
-{
-/* Support older NumPy data type names
-*/
-%#if NDARRAY_VERSION < 0x01000000
-%#define NPY_BOOL          PyArray_BOOL
-%#define NPY_BYTE          PyArray_BYTE
-%#define NPY_UBYTE         PyArray_UBYTE
-%#define NPY_SHORT         PyArray_SHORT
-%#define NPY_USHORT        PyArray_USHORT
-%#define NPY_INT           PyArray_INT
-%#define NPY_UINT          PyArray_UINT
-%#define NPY_LONG          PyArray_LONG
-%#define NPY_ULONG         PyArray_ULONG
-%#define NPY_LONGLONG      PyArray_LONGLONG
-%#define NPY_ULONGLONG     PyArray_ULONGLONG
-%#define NPY_FLOAT         PyArray_FLOAT
-%#define NPY_DOUBLE        PyArray_DOUBLE
-%#define NPY_LONGDOUBLE    PyArray_LONGDOUBLE
-%#define NPY_CFLOAT        PyArray_CFLOAT
-%#define NPY_CDOUBLE       PyArray_CDOUBLE
-%#define NPY_CLONGDOUBLE   PyArray_CLONGDOUBLE
-%#define NPY_OBJECT        PyArray_OBJECT
-%#define NPY_STRING        PyArray_STRING
-%#define NPY_UNICODE       PyArray_UNICODE
-%#define NPY_VOID          PyArray_VOID
-%#define NPY_NTYPES        PyArray_NTYPES
-%#define NPY_NOTYPE        PyArray_NOTYPE
-%#define NPY_CHAR          PyArray_CHAR
-%#define NPY_USERDEF       PyArray_USERDEF
-%#define npy_intp          intp
-
-%#define NPY_MAX_BYTE      MAX_BYTE
-%#define NPY_MIN_BYTE      MIN_BYTE
-%#define NPY_MAX_UBYTE     MAX_UBYTE
-%#define NPY_MAX_SHORT     MAX_SHORT
-%#define NPY_MIN_SHORT     MIN_SHORT
-%#define NPY_MAX_USHORT    MAX_USHORT
-%#define NPY_MAX_INT       MAX_INT
-%#define NPY_MIN_INT       MIN_INT
-%#define NPY_MAX_UINT      MAX_UINT
-%#define NPY_MAX_LONG      MAX_LONG
-%#define NPY_MIN_LONG      MIN_LONG
-%#define NPY_MAX_ULONG     MAX_ULONG
-%#define NPY_MAX_LONGLONG  MAX_LONGLONG
-%#define NPY_MIN_LONGLONG  MIN_LONGLONG
-%#define NPY_MAX_ULONGLONG MAX_ULONGLONG
-%#define NPY_MAX_INTP      MAX_INTP
-%#define NPY_MIN_INTP      MIN_INTP
-
-%#define NPY_FARRAY        FARRAY
-%#define NPY_F_CONTIGUOUS  F_CONTIGUOUS
-%#endif
-}
-
-/**********************************************************************/
-
-/* The following code originally appeared in
- * enthought/kiva/agg/src/numeric.i written by Eric Jones.  It was
- * translated from C++ to C by John Hunter.  Bill Spotz has modified
- * it to fix some minor bugs, upgrade from Numeric to numpy (all
- * versions), add some comments and functionality, and convert from
- * direct code insertion to SWIG fragments.
- */
-
-%fragment("NumPy_Macros", "header")
-{
-/* Macros to extract array attributes.
- */
-%#define is_array(a)            ((a) && PyArray_Check((PyArrayObject *)a))
-%#define array_type(a)          (int)(PyArray_TYPE(a))
-%#define array_numdims(a)       (((PyArrayObject *)a)->nd)
-%#define array_dimensions(a)    (((PyArrayObject *)a)->dimensions)
-%#define array_size(a,i)        (((PyArrayObject *)a)->dimensions[i])
-%#define array_data(a)          (((PyArrayObject *)a)->data)
-%#define array_is_contiguous(a) (PyArray_ISCONTIGUOUS(a))
-%#define array_is_native(a)     (PyArray_ISNOTSWAPPED(a))
-%#define array_is_fortran(a)    (PyArray_ISFORTRAN(a))
-}
-
-/**********************************************************************/
-
-%fragment("NumPy_Utilities", "header")
-{
-  /* Given a PyObject, return a string describing its type.
-   */
-  char* pytype_string(PyObject* py_obj) {
-    if (py_obj == NULL          ) return "C NULL value";
-    if (py_obj == Py_None       ) return "Python None" ;
-    if (PyCallable_Check(py_obj)) return "callable"    ;
-    if (PyString_Check(  py_obj)) return "string"      ;
-    if (PyInt_Check(     py_obj)) return "int"         ;
-    if (PyFloat_Check(   py_obj)) return "float"       ;
-    if (PyDict_Check(    py_obj)) return "dict"        ;
-    if (PyList_Check(    py_obj)) return "list"        ;
-    if (PyTuple_Check(   py_obj)) return "tuple"       ;
-    if (PyFile_Check(    py_obj)) return "file"        ;
-    if (PyModule_Check(  py_obj)) return "module"      ;
-    if (PyInstance_Check(py_obj)) return "instance"    ;
-
-    return "unknow type";
-  }
-
-  /* Given a NumPy typecode, return a string describing the type.
-   */
-  char* typecode_string(int typecode) {
-    static char* type_names[25] = {"bool", "byte", "unsigned byte",
-                                   "short", "unsigned short", "int",
-                                   "unsigned int", "long", "unsigned long",
-                                   "long long", "unsigned long long",
-                                   "float", "double", "long double",
-                                   "complex float", "complex double",
-                                   "complex long double", "object",
-                                   "string", "unicode", "void", "ntypes",
-                                   "notype", "char", "unknown"};
-    return typecode < 24 ? type_names[typecode] : type_names[24];
-  }
-
-  /* Make sure input has correct numpy type.  Allow character and byte
-   * to match.  Also allow int and long to match.  This is deprecated.
-   * You should use PyArray_EquivTypenums() instead.
-   */
-  int type_match(int actual_type, int desired_type) {
-    return PyArray_EquivTypenums(actual_type, desired_type);
-  }
-}
-
-/**********************************************************************/
-
-%fragment("NumPy_Object_to_Array", "header",
-          fragment="NumPy_Backward_Compatibility",
-          fragment="NumPy_Macros",
-          fragment="NumPy_Utilities")
-{
-  /* Given a PyObject pointer, cast it to a PyArrayObject pointer if
-   * legal.  If not, set the python error string appropriately and
-   * return NULL.
-   */
-  PyArrayObject* obj_to_array_no_conversion(PyObject* input, int typecode)
-  {
-    PyArrayObject* ary = NULL;
-    if (is_array(input) && (typecode == NPY_NOTYPE ||
-                            PyArray_EquivTypenums(array_type(input), typecode)))
-    {
-      ary = (PyArrayObject*) input;
-    }
-    else if is_array(input)
-    {
-      char* desired_type = typecode_string(typecode);
-      char* actual_type  = typecode_string(array_type(input));
-      PyErr_Format(PyExc_TypeError,
-                   "Array of type '%s' required.  Array of type '%s' given",
-                   desired_type, actual_type);
-      ary = NULL;
-    }
-    else
-    {
-      char * desired_type = typecode_string(typecode);
-      char * actual_type  = pytype_string(input);
-      PyErr_Format(PyExc_TypeError,
-                   "Array of type '%s' required.  A '%s' was given",
-                   desired_type, actual_type);
-      ary = NULL;
-    }
-    return ary;
-  }
-
-  /* Convert the given PyObject to a NumPy array with the given
-   * typecode.  On success, return a valid PyArrayObject* with the
-   * correct type.  On failure, the python error string will be set and
-   * the routine returns NULL.
-   */
-  PyArrayObject* obj_to_array_allow_conversion(PyObject* input, int typecode,
-                                               int* is_new_object)
-  {
-    PyArrayObject* ary = NULL;
-    PyObject* py_obj;
-    if (is_array(input) && (typecode == NPY_NOTYPE ||
-                            PyArray_EquivTypenums(array_type(input),typecode)))
-    {
-      ary = (PyArrayObject*) input;
-      *is_new_object = 0;
-    }
-    else
-    {
-      py_obj = PyArray_FROMANY(input, typecode, 0, 0, NPY_DEFAULT);
-      /* If NULL, PyArray_FromObject will have set python error value.*/
-      ary = (PyArrayObject*) py_obj;
-      *is_new_object = 1;
-    }
-    return ary;
-  }
-
-  /* Given a PyArrayObject, check to see if it is contiguous.  If so,
-   * return the input pointer and flag it as not a new object.  If it is
-   * not contiguous, create a new PyArrayObject using the original data,
-   * flag it as a new object and return the pointer.
-   */
-  PyArrayObject* make_contiguous(PyArrayObject* ary, int* is_new_object,
-                                 int min_dims, int max_dims)
-  {
-    PyArrayObject* result;
-    if (array_is_contiguous(ary))
-    {
-      result = ary;
-      *is_new_object = 0;
-    }
-    else
-    {
-      result = (PyArrayObject*) PyArray_ContiguousFromObject((PyObject*)ary,
-                                                             array_type(ary),
-                                                             min_dims,
-                                                             max_dims);
-      *is_new_object = 1;
-    }
-    return result;
-  }
-
-  /* Given a PyArrayObject, check to see if it is Fortran-contiguous.
-   * If so, return the input pointer, but do not flag it as not a new
-   * object.  If it is not Fortran-contiguous, create a new
-   * PyArrayObject using the original data, flag it as a new object
-   * and return the pointer.
-   */
-  PyArrayObject* make_fortran(PyArrayObject* ary, int* is_new_object,
-                              int min_dims, int max_dims)
-  {
-    PyArrayObject* result;
-    if (array_is_fortran(ary))
-    {
-      result = ary;
-      *is_new_object = 0;
-    }
-    else
-    {
-      Py_INCREF(ary->descr);
-      result = (PyArrayObject*) PyArray_FromArray(ary, ary->descr, NPY_FORTRAN);
-      *is_new_object = 1;
-    }
-    return result;
-  }
-
-  /* Convert a given PyObject to a contiguous PyArrayObject of the
-   * specified type.  If the input object is not a contiguous
-   * PyArrayObject, a new one will be created and the new object flag
-   * will be set.
-   */
-  PyArrayObject* obj_to_array_contiguous_allow_conversion(PyObject* input,
-                                                          int typecode,
-                                                          int* is_new_object)
-  {
-    int is_new1 = 0;
-    int is_new2 = 0;
-    PyArrayObject* ary2;
-    PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode,
-                                                        &is_new1);
-    if (ary1)
-    {
-      ary2 = make_contiguous(ary1, &is_new2, 0, 0);
-      if ( is_new1 && is_new2)
-      {
-        Py_DECREF(ary1);
-      }
-      ary1 = ary2;
-    }
-    *is_new_object = is_new1 || is_new2;
-    return ary1;
-  }
-
-  /* Convert a given PyObject to a Fortran-ordered PyArrayObject of the
-   * specified type.  If the input object is not a Fortran-ordered
-   * PyArrayObject, a new one will be created and the new object flag
-   * will be set.
-   */
-  PyArrayObject* obj_to_array_fortran_allow_conversion(PyObject* input,
-                                                       int typecode,
-                                                       int* is_new_object)
-  {
-    int is_new1 = 0;
-    int is_new2 = 0;
-    PyArrayObject* ary2;
-    PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode,
-                                                        &is_new1);
-    if (ary1)
-    {
-      ary2 = make_fortran(ary1, &is_new2, 0, 0);
-      if (is_new1 && is_new2)
-      {
-        Py_DECREF(ary1);
-      }
-      ary1 = ary2;
-    }
-    *is_new_object = is_new1 || is_new2;
-    return ary1;
-  }
-
-} /* end fragment */
-
-
-/**********************************************************************/
-
-%fragment("NumPy_Array_Requirements", "header",
-          fragment="NumPy_Backward_Compatibility",
-          fragment="NumPy_Macros")
-{
-  /* Test whether a python object is contiguous.  If array is
-   * contiguous, return 1.  Otherwise, set the python error string and
-   * return 0.
-   */
-  int require_contiguous(PyArrayObject* ary)
-  {
-    int contiguous = 1;
-    if (!array_is_contiguous(ary))
-    {
-      PyErr_SetString(PyExc_TypeError,
-                      "Array must be contiguous.  A non-contiguous array was given");
-      contiguous = 0;
-    }
-    return contiguous;
-  }
-
-  /* Require that a numpy array is not byte-swapped.  If the array is
-   * not byte-swapped, return 1.  Otherwise, set the python error string
-   * and return 0.
-   */
-  int require_native(PyArrayObject* ary)
-  {
-    int native = 1;
-    if (!array_is_native(ary))
-    {
-      PyErr_SetString(PyExc_TypeError,
-                      "Array must have native byteorder.  "
-                      "A byte-swapped array was given");
-      native = 0;
-    }
-    return native;
-  }
-
-  /* Require the given PyArrayObject to have a specified number of
-   * dimensions.  If the array has the specified number of dimensions,
-   * return 1.  Otherwise, set the python error string and return 0.
-   */
-  int require_dimensions(PyArrayObject* ary, int exact_dimensions)
-  {
-    int success = 1;
-    if (array_numdims(ary) != exact_dimensions)
-    {
-      PyErr_Format(PyExc_TypeError,
-                   "Array must have %d dimensions.  Given array has %d dimensions",
-                   exact_dimensions, array_numdims(ary));
-      success = 0;
-    }
-    return success;
-  }
-
-  /* Require the given PyArrayObject to have one of a list of specified
-   * number of dimensions.  If the array has one of the specified number
-   * of dimensions, return 1.  Otherwise, set the python error string
-   * and return 0.
-   */
-  int require_dimensions_n(PyArrayObject* ary, int* exact_dimensions, int n)
-  {
-    int success = 0;
-    int i;
-    char dims_str[255] = "";
-    char s[255];
-    for (i = 0; i < n && !success; i++)
-    {
-      if (array_numdims(ary) == exact_dimensions[i])
-      {
-        success = 1;
-      }
-    }
-    if (!success)
-    {
-      for (i = 0; i < n-1; i++)
-      {
-        sprintf(s, "%d, ", exact_dimensions[i]);
-        strcat(dims_str,s);
-      }
-      sprintf(s, " or %d", exact_dimensions[n-1]);
-      strcat(dims_str,s);
-      PyErr_Format(PyExc_TypeError,
-                   "Array must have %s dimensions.  Given array has %d dimensions",
-                   dims_str, array_numdims(ary));
-    }
-    return success;
-  }
-
-  /* Require the given PyArrayObject to have a specified shape.  If the
-   * array has the specified shape, return 1.  Otherwise, set the python
-   * error string and return 0.
-   */
-  int require_size(PyArrayObject* ary, npy_intp* size, int n)
-  {
-    int i;
-    int success = 1;
-    int len;
-    char desired_dims[255] = "[";
-    char s[255];
-    char actual_dims[255] = "[";
-    for(i=0; i < n;i++)
-    {
-      if (size[i] != -1 &&  size[i] != array_size(ary,i))
-      {
-        success = 0;
-      }
-    }
-    if (!success)
-    {
-      for (i = 0; i < n; i++)
-      {
-        if (size[i] == -1)
-        {
-          sprintf(s, "*,");
-        }
-        else
-        {
-          sprintf(s, "%ld,", (long int)size[i]);
-        }
-        strcat(desired_dims,s);
-      }
-      len = strlen(desired_dims);
-      desired_dims[len-1] = ']';
-      for (i = 0; i < n; i++)
-      {
-        sprintf(s, "%ld,", (long int)array_size(ary,i));
-        strcat(actual_dims,s);
-      }
-      len = strlen(actual_dims);
-      actual_dims[len-1] = ']';
-      PyErr_Format(PyExc_TypeError,
-                   "Array must have shape of %s.  Given array has shape of %s",
-                   desired_dims, actual_dims);
-    }
-    return success;
-  }
-
-  /* Require the given PyArrayObject to to be FORTRAN ordered.  If the
-   * the PyArrayObject is already FORTRAN ordered, do nothing.  Else,
-   * set the FORTRAN ordering flag and recompute the strides.
-   */
-  int require_fortran(PyArrayObject* ary)
-  {
-    int success = 1;
-    int nd = array_numdims(ary);
-    int i;
-    if (array_is_fortran(ary)) return success;
-    /* Set the FORTRAN ordered flag */
-    ary->flags = NPY_FARRAY;
-    /* Recompute the strides */
-    ary->strides[0] = ary->strides[nd-1];
-    for (i=1; i < nd; ++i)
-      ary->strides[i] = ary->strides[i-1] * array_size(ary,i-1);
-    return success;
-  }
-}
-
-/* Combine all NumPy fragments into one for convenience */
-%fragment("NumPy_Fragments", "header",
-          fragment="NumPy_Backward_Compatibility",
-          fragment="NumPy_Macros",
-          fragment="NumPy_Utilities",
-          fragment="NumPy_Object_to_Array",
-          fragment="NumPy_Array_Requirements") { }
-
-/* End John Hunter translation (with modifications by Bill Spotz)
- */
-
-/* %numpy_typemaps() macro
- *
- * This macro defines a family of 41 typemaps that allow C arguments
- * of the form
- *
- *     (DATA_TYPE IN_ARRAY1[ANY])
- *     (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
- *     (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
- *
- *     (DATA_TYPE IN_ARRAY2[ANY][ANY])
- *     (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
- *     (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
- *
- *     (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
- *     (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3)
- *     (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3)
- *
- *     (DATA_TYPE INPLACE_ARRAY1[ANY])
- *     (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1)
- *     (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1)
- *
- *     (DATA_TYPE INPLACE_ARRAY2[ANY][ANY])
- *     (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2)
- *     (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2)
- *
- *     (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY])
- *     (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3)
- *     (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3)
- *
- *     (DATA_TYPE ARGOUT_ARRAY1[ANY])
- *     (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1)
- *     (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1)
- *
- *     (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY])
- *
- *     (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY])
- *
- *     (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1)
- *     (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1)
- *
- *     (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
- *     (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2)
- *     (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
- *     (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2)
- *
- *     (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
- *     (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3)
- *     (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
- *     (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3)
- *
- * where "DATA_TYPE" is any type supported by the NumPy module, and
- * "DIM_TYPE" is any int-like type suitable for specifying dimensions.
- * The difference between "ARRAY" typemaps and "FARRAY" typemaps is
- * that the "FARRAY" typemaps expect FORTRAN ordering of
- * multidimensional arrays.  In python, the dimensions will not need
- * to be specified (except for the "DATA_TYPE* ARGOUT_ARRAY1"
- * typemaps).  The IN_ARRAYs can be a numpy array or any sequence that
- * can be converted to a numpy array of the specified type.  The
- * INPLACE_ARRAYs must be numpy arrays of the appropriate type.  The
- * ARGOUT_ARRAYs will be returned as new numpy arrays of the
- * appropriate type.
- *
- * These typemaps can be applied to existing functions using the
- * %apply directive.  For example:
- *
- *     %apply (double* IN_ARRAY1, int DIM1) {(double* series, int length)};
- *     double prod(double* series, int length);
- *
- *     %apply (int DIM1, int DIM2, double* INPLACE_ARRAY2)
- *           {(int rows, int cols, double* matrix        )};
- *     void floor(int rows, int cols, double* matrix, double f);
- *
- *     %apply (double IN_ARRAY3[ANY][ANY][ANY])
- *           {(double tensor[2][2][2]         )};
- *     %apply (double ARGOUT_ARRAY3[ANY][ANY][ANY])
- *           {(double low[2][2][2]                )};
- *     %apply (double ARGOUT_ARRAY3[ANY][ANY][ANY])
- *           {(double upp[2][2][2]                )};
- *     void luSplit(double tensor[2][2][2],
- *                  double low[2][2][2],
- *                  double upp[2][2][2]    );
- *
- * or directly with
- *
- *     double prod(double* IN_ARRAY1, int DIM1);
- *
- *     void floor(int DIM1, int DIM2, double* INPLACE_ARRAY2, double f);
- *
- *     void luSplit(double IN_ARRAY3[ANY][ANY][ANY],
- *                  double ARGOUT_ARRAY3[ANY][ANY][ANY],
- *                  double ARGOUT_ARRAY3[ANY][ANY][ANY]);
- */
-
-%define %numpy_typemaps(DATA_TYPE, DATA_TYPECODE, DIM_TYPE)
-
-/************************/
-/* Input Array Typemaps */
-/************************/
-
-/* Typemap suite for (DATA_TYPE IN_ARRAY1[ANY])
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE IN_ARRAY1[ANY])
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE IN_ARRAY1[ANY])
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[1] = { $1_dim0 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 1) ||
-      !require_size(array, size, 1)) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-%typemap(freearg)
-  (DATA_TYPE IN_ARRAY1[ANY])
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[1] = { -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 1) ||
-      !require_size(array, size, 1)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-}
-%typemap(freearg)
-  (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[1] = {-1};
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 1) ||
-      !require_size(array, size, 1)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DATA_TYPE*) array_data(array);
-}
-%typemap(freearg)
-  (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE IN_ARRAY2[ANY][ANY])
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE IN_ARRAY2[ANY][ANY])
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE IN_ARRAY2[ANY][ANY])
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[2] = { $1_dim0, $1_dim1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 2) ||
-      !require_size(array, size, 2)) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-%typemap(freearg)
-  (DATA_TYPE IN_ARRAY2[ANY][ANY])
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[2] = { -1, -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 2) ||
-      !require_size(array, size, 2)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-}
-%typemap(freearg)
-  (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[2] = { -1, -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 2) ||
-      !require_size(array, size, 2)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DATA_TYPE*) array_data(array);
-}
-%typemap(freearg)
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[2] = { -1, -1 };
-  array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE,
-                                                &is_new_object);
-  if (!array || !require_dimensions(array, 2) ||
-      !require_size(array, size, 2) || !require_fortran(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-}
-%typemap(freearg)
-  (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[2] = { -1, -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 2) ||
-      !require_size(array, size, 2) || !require_fortran(array)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DATA_TYPE*) array_data(array);
-}
-%typemap(freearg)
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 3) ||
-      !require_size(array, size, 3)) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-%typemap(freearg)
-  (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2,
- *                    DIM_TYPE DIM3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[3] = { -1, -1, -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 3) ||
-      !require_size(array, size, 3)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-  $4 = (DIM_TYPE) array_size(array,2);
-}
-%typemap(freearg)
-  (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3,
- *                    DATA_TYPE* IN_ARRAY3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[3] = { -1, -1, -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 3) ||
-      !require_size(array, size, 3)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DIM_TYPE) array_size(array,2);
-  $4 = (DATA_TYPE*) array_data(array);
-}
-%typemap(freearg)
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2,
- *                    DIM_TYPE DIM3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[3] = { -1, -1, -1 };
-  array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE,
-                                                &is_new_object);
-  if (!array || !require_dimensions(array, 3) ||
-      !require_size(array, size, 3) | !require_fortran(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-  $4 = (DIM_TYPE) array_size(array,2);
-}
-%typemap(freearg)
-  (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3,
- *                    DATA_TYPE* IN_FARRAY3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[3] = { -1, -1, -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 3) ||
-      !require_size(array, size, 3) || !require_fortran(array)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DIM_TYPE) array_size(array,2);
-  $4 = (DATA_TYPE*) array_data(array);
-}
-%typemap(freearg)
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/***************************/
-/* In-Place Array Typemaps */
-/***************************/
-
-/* Typemap suite for (DATA_TYPE INPLACE_ARRAY1[ANY])
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE INPLACE_ARRAY1[ANY])
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE INPLACE_ARRAY1[ANY])
-  (PyArrayObject* array=NULL)
-{
-  npy_intp size[1] = { $1_dim0 };
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,1) || !require_size(array, size, 1) ||
-      !require_contiguous(array) || !require_native(array)) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1)
-  (PyArrayObject* array=NULL, int i=1)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,1) || !require_contiguous(array)
-      || !require_native(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = 1;
-  for (i=0; i < array_numdims(array); ++i) $2 *= array_size(array,i);
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1)
-  (PyArrayObject* array=NULL, int i=0)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,1) || !require_contiguous(array)
-      || !require_native(array)) SWIG_fail;
-  $1 = 1;
-  for (i=0; i < array_numdims(array); ++i) $1 *= array_size(array,i);
-  $2 = (DATA_TYPE*) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE INPLACE_ARRAY2[ANY][ANY])
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE INPLACE_ARRAY2[ANY][ANY])
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE INPLACE_ARRAY2[ANY][ANY])
-  (PyArrayObject* array=NULL)
-{
-  npy_intp size[2] = { $1_dim0, $1_dim1 };
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,2) || !require_size(array, size, 2) ||
-      !require_contiguous(array) || !require_native(array)) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,2) || !require_contiguous(array)
-      || !require_native(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,2) || !require_contiguous(array) ||
-      !require_native(array)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DATA_TYPE*) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,2) || !require_contiguous(array)
-      || !require_native(array) || !require_fortran(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,2) || !require_contiguous(array) ||
-      !require_native(array) || !require_fortran(array)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DATA_TYPE*) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY])
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY])
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY])
-  (PyArrayObject* array=NULL)
-{
-  npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 };
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,3) || !require_size(array, size, 3) ||
-      !require_contiguous(array) || !require_native(array)) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2,
- *                    DIM_TYPE DIM3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,3) || !require_contiguous(array) ||
-      !require_native(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-  $4 = (DIM_TYPE) array_size(array,2);
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3,
- *                    DATA_TYPE* INPLACE_ARRAY3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,3) || !require_contiguous(array)
-      || !require_native(array)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DIM_TYPE) array_size(array,2);
-  $4 = (DATA_TYPE*) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2,
- *                    DIM_TYPE DIM3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,3) || !require_contiguous(array) ||
-      !require_native(array) || !require_fortran(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-  $4 = (DIM_TYPE) array_size(array,2);
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3,
- *                    DATA_TYPE* INPLACE_FARRAY3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,3) || !require_contiguous(array)
-      || !require_native(array) || !require_fortran(array)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DIM_TYPE) array_size(array,2);
-  $4 = (DATA_TYPE*) array_data(array);
-}
-
-/*************************/
-/* Argout Array Typemaps */
-/*************************/
-
-/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY1[ANY])
- */
-%typemap(in,numinputs=0,
-         fragment="NumPy_Backward_Compatibility,NumPy_Macros")
-  (DATA_TYPE ARGOUT_ARRAY1[ANY])
-  (PyObject * array = NULL)
-{
-  npy_intp dims[1] = { $1_dim0 };
-  array = PyArray_SimpleNew(1, dims, DATA_TYPECODE);
-  if (!array) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-%typemap(argout)
-  (DATA_TYPE ARGOUT_ARRAY1[ANY])
-{
-  $result = SWIG_Python_AppendOutput($result,array$argnum);
-}
-
-/* Typemap suite for (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1)
- */
-%typemap(in,numinputs=1,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1)
-  (PyObject * array = NULL)
-{
-  npy_intp dims[1];
-  if (!PyInt_Check($input))
-  {
-    char* typestring = pytype_string($input);
-    PyErr_Format(PyExc_TypeError,
-                 "Int dimension expected.  '%s' given.",
-                 typestring);
-    SWIG_fail;
-  }
-  $2 = (DIM_TYPE) PyInt_AsLong($input);
-  dims[0] = (npy_intp) $2;
-  array = PyArray_SimpleNew(1, dims, DATA_TYPECODE);
-  if (!array) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-}
-%typemap(argout)
-  (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1)
-{
-  $result = SWIG_Python_AppendOutput($result,array$argnum);
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1)
- */
-%typemap(in,numinputs=1,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1)
-  (PyObject * array = NULL)
-{
-  npy_intp dims[1];
-  if (!PyInt_Check($input))
-  {
-    char* typestring = pytype_string($input);
-    PyErr_Format(PyExc_TypeError,
-                 "Int dimension expected.  '%s' given.",
-                 typestring);
-    SWIG_fail;
-  }
-  $1 = (DIM_TYPE) PyInt_AsLong($input);
-  dims[0] = (npy_intp) $1;
-  array = PyArray_SimpleNew(1, dims, DATA_TYPECODE);
-  if (!array) SWIG_fail;
-  $2 = (DATA_TYPE*) array_data(array);
-}
-%typemap(argout)
-  (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1)
-{
-  $result = SWIG_Python_AppendOutput($result,array$argnum);
-}
-
-/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY])
- */
-%typemap(in,numinputs=0,
-         fragment="NumPy_Backward_Compatibility,NumPy_Macros")
-  (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY])
-  (PyObject * array = NULL)
-{
-  npy_intp dims[2] = { $1_dim0, $1_dim1 };
-  array = PyArray_SimpleNew(2, dims, DATA_TYPECODE);
-  if (!array) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-%typemap(argout)
-  (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY])
-{
-  $result = SWIG_Python_AppendOutput($result,array$argnum);
-}
-
-/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY])
- */
-%typemap(in,numinputs=0,
-         fragment="NumPy_Backward_Compatibility,NumPy_Macros")
-  (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY])
-  (PyObject * array = NULL)
-{
-  npy_intp dims[3] = { $1_dim0, $1_dim1, $1_dim2 };
-  array = PyArray_SimpleNew(3, dims, DATA_TYPECODE);
-  if (!array) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-%typemap(argout)
-  (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY])
-{
-  $result = SWIG_Python_AppendOutput($result,array$argnum);
-}
-
-/*****************************/
-/* Argoutview Array Typemaps */
-/*****************************/
-
-/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1)
- */
-%typemap(in,numinputs=0)
-  (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1    )
-  (DATA_TYPE*  data_temp        , DIM_TYPE  dim_temp)
-{
-  $1 = &data_temp;
-  $2 = &dim_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility")
-  (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1)
-{
-  npy_intp dims[1] = { *$2 };
-  PyObject * array = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$1));
-  if (!array) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,array);
-}
-
-/* Typemap suite for (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1)
- */
-%typemap(in,numinputs=0)
-  (DIM_TYPE* DIM1    , DATA_TYPE** ARGOUTVIEW_ARRAY1)
-  (DIM_TYPE  dim_temp, DATA_TYPE*  data_temp        )
-{
-  $1 = &dim_temp;
-  $2 = &data_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility")
-  (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1)
-{
-  npy_intp dims[1] = { *$1 };
-  PyObject * array = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$2));
-  if (!array) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,array);
-}
-
-/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
- */
-%typemap(in,numinputs=0)
-  (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1     , DIM_TYPE* DIM2     )
-  (DATA_TYPE*  data_temp        , DIM_TYPE  dim1_temp, DIM_TYPE  dim2_temp)
-{
-  $1 = &data_temp;
-  $2 = &dim1_temp;
-  $3 = &dim2_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility")
-  (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
-{
-  npy_intp dims[2] = { *$2, *$3 };
-  PyObject * array = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1));
-  if (!array) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,array);
-}
-
-/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2)
- */
-%typemap(in,numinputs=0)
-  (DIM_TYPE* DIM1     , DIM_TYPE* DIM2     , DATA_TYPE** ARGOUTVIEW_ARRAY2)
-  (DIM_TYPE  dim1_temp, DIM_TYPE  dim2_temp, DATA_TYPE*  data_temp        )
-{
-  $1 = &dim1_temp;
-  $2 = &dim2_temp;
-  $3 = &data_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility")
-  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2)
-{
-  npy_intp dims[2] = { *$1, *$2 };
-  PyObject * array = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3));
-  if (!array) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,array);
-}
-
-/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
- */
-%typemap(in,numinputs=0)
-  (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1     , DIM_TYPE* DIM2     )
-  (DATA_TYPE*  data_temp        , DIM_TYPE  dim1_temp, DIM_TYPE  dim2_temp)
-{
-  $1 = &data_temp;
-  $2 = &dim1_temp;
-  $3 = &dim2_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements")
-  (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
-{
-  npy_intp dims[2] = { *$2, *$3 };
-  PyObject * obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1));
-  PyArrayObject * array = (PyArrayObject*) obj;
-  if (!array || !require_fortran(array)) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,obj);
-}
-
-/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2)
- */
-%typemap(in,numinputs=0)
-  (DIM_TYPE* DIM1     , DIM_TYPE* DIM2     , DATA_TYPE** ARGOUTVIEW_FARRAY2)
-  (DIM_TYPE  dim1_temp, DIM_TYPE  dim2_temp, DATA_TYPE*  data_temp        )
-{
-  $1 = &dim1_temp;
-  $2 = &dim2_temp;
-  $3 = &data_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements")
-  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2)
-{
-  npy_intp dims[2] = { *$1, *$2 };
-  PyObject * obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3));
-  PyArrayObject * array = (PyArrayObject*) obj;
-  if (!array || !require_fortran(array)) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,obj);
-}
-
-/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2,
-                      DIM_TYPE* DIM3)
- */
-%typemap(in,numinputs=0)
-  (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
-  (DATA_TYPE* data_temp, DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp)
-{
-  $1 = &data_temp;
-  $2 = &dim1_temp;
-  $3 = &dim2_temp;
-  $4 = &dim3_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility")
-  (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
-{
-  npy_intp dims[3] = { *$2, *$3, *$4 };
-  PyObject * array = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1));
-  if (!array) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,array);
-}
-
-/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3,
-                      DATA_TYPE** ARGOUTVIEW_ARRAY3)
- */
-%typemap(in,numinputs=0)
-  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3)
-  (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp)
-{
-  $1 = &dim1_temp;
-  $2 = &dim2_temp;
-  $3 = &dim3_temp;
-  $4 = &data_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility")
-  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3)
-{
-  npy_intp dims[3] = { *$1, *$2, *$3 };
-  PyObject * array = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$3));
-  if (!array) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,array);
-}
-
-/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2,
-                      DIM_TYPE* DIM3)
- */
-%typemap(in,numinputs=0)
-  (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
-  (DATA_TYPE* data_temp, DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp)
-{
-  $1 = &data_temp;
-  $2 = &dim1_temp;
-  $3 = &dim2_temp;
-  $4 = &dim3_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements")
-  (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
-{
-  npy_intp dims[3] = { *$2, *$3, *$4 };
-  PyObject * obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1));
-  PyArrayObject * array = (PyArrayObject*) obj;
-  if (!array || require_fortran(array)) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,obj);
-}
-
-/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3,
-                      DATA_TYPE** ARGOUTVIEW_FARRAY3)
- */
-%typemap(in,numinputs=0)
-  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3)
-  (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp)
-{
-  $1 = &dim1_temp;
-  $2 = &dim2_temp;
-  $3 = &dim3_temp;
-  $4 = &data_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements")
-  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3)
-{
-  npy_intp dims[3] = { *$1, *$2, *$3 };
-  PyObject * obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$3));
-  PyArrayObject * array = (PyArrayObject*) obj;
-  if (!array || require_fortran(array)) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,obj);
-}
-
-%enddef    /* %numpy_typemaps() macro */
-/* *************************************************************** */
-
-/* Concrete instances of the %numpy_typemaps() macro: Each invocation
- * below applies all of the typemaps above to the specified data type.
- */
-%numpy_typemaps(signed char       , NPY_BYTE     , int)
-%numpy_typemaps(unsigned char     , NPY_UBYTE    , int)
-%numpy_typemaps(short             , NPY_SHORT    , int)
-%numpy_typemaps(unsigned short    , NPY_USHORT   , int)
-%numpy_typemaps(int               , NPY_INT      , int)
-%numpy_typemaps(unsigned int      , NPY_UINT     , int)
-%numpy_typemaps(long              , NPY_LONG     , int)
-%numpy_typemaps(unsigned long     , NPY_ULONG    , int)
-%numpy_typemaps(long long         , NPY_LONGLONG , int)
-%numpy_typemaps(unsigned long long, NPY_ULONGLONG, int)
-%numpy_typemaps(float             , NPY_FLOAT    , int)
-%numpy_typemaps(double            , NPY_DOUBLE   , int)
-
-/* ***************************************************************
- * The follow macro expansion does not work, because C++ bool is 4
- * bytes and NPY_BOOL is 1 byte
- *
- *    %numpy_typemaps(bool, NPY_BOOL, int)
- */
-
-/* ***************************************************************
- * On my Mac, I get the following warning for this macro expansion:
- * 'swig/python detected a memory leak of type 'long double *', no destructor found.'
- *
- *    %numpy_typemaps(long double, NPY_LONGDOUBLE, int)
- */
-
-/* ***************************************************************
- * Swig complains about a syntax error for the following macro
- * expansions:
- *
- *    %numpy_typemaps(complex float,  NPY_CFLOAT , int)
- *
- *    %numpy_typemaps(complex double, NPY_CDOUBLE, int)
- *
- *    %numpy_typemaps(complex long double, NPY_CLONGDOUBLE, int)
- */
-
-#endif /* SWIGPYTHON */
diff --git a/lang/numpy.i.in b/lang/numpy.i.in
new file mode 100644 (file)
index 0000000..25d1f1a
--- /dev/null
@@ -0,0 +1,1634 @@
+/* -*- C -*-  (not really, but good for syntax highlighting) */
+#ifdef SWIGPYTHON
+
+%{
+#ifndef SWIG_FILE_WITH_INIT
+#  define NO_IMPORT_ARRAY
+#endif
+#include "stdio.h"
+#include <numpy/arrayobject.h>
+%}
+
+/**********************************************************************/
+
+%fragment("NumPy_Backward_Compatibility", "header")
+{
+/* Support older NumPy data type names
+*/
+%#if NDARRAY_VERSION < 0x01000000
+%#define NPY_BOOL          PyArray_BOOL
+%#define NPY_BYTE          PyArray_BYTE
+%#define NPY_UBYTE         PyArray_UBYTE
+%#define NPY_SHORT         PyArray_SHORT
+%#define NPY_USHORT        PyArray_USHORT
+%#define NPY_INT           PyArray_INT
+%#define NPY_UINT          PyArray_UINT
+%#define NPY_LONG          PyArray_LONG
+%#define NPY_ULONG         PyArray_ULONG
+%#define NPY_LONGLONG      PyArray_LONGLONG
+%#define NPY_ULONGLONG     PyArray_ULONGLONG
+%#define NPY_FLOAT         PyArray_FLOAT
+%#define NPY_DOUBLE        PyArray_DOUBLE
+%#define NPY_LONGDOUBLE    PyArray_LONGDOUBLE
+%#define NPY_CFLOAT        PyArray_CFLOAT
+%#define NPY_CDOUBLE       PyArray_CDOUBLE
+%#define NPY_CLONGDOUBLE   PyArray_CLONGDOUBLE
+%#define NPY_OBJECT        PyArray_OBJECT
+%#define NPY_STRING        PyArray_STRING
+%#define NPY_UNICODE       PyArray_UNICODE
+%#define NPY_VOID          PyArray_VOID
+%#define NPY_NTYPES        PyArray_NTYPES
+%#define NPY_NOTYPE        PyArray_NOTYPE
+%#define NPY_CHAR          PyArray_CHAR
+%#define NPY_USERDEF       PyArray_USERDEF
+%#define npy_intp          intp
+
+%#define NPY_MAX_BYTE      MAX_BYTE
+%#define NPY_MIN_BYTE      MIN_BYTE
+%#define NPY_MAX_UBYTE     MAX_UBYTE
+%#define NPY_MAX_SHORT     MAX_SHORT
+%#define NPY_MIN_SHORT     MIN_SHORT
+%#define NPY_MAX_USHORT    MAX_USHORT
+%#define NPY_MAX_INT       MAX_INT
+%#define NPY_MIN_INT       MIN_INT
+%#define NPY_MAX_UINT      MAX_UINT
+%#define NPY_MAX_LONG      MAX_LONG
+%#define NPY_MIN_LONG      MIN_LONG
+%#define NPY_MAX_ULONG     MAX_ULONG
+%#define NPY_MAX_LONGLONG  MAX_LONGLONG
+%#define NPY_MIN_LONGLONG  MIN_LONGLONG
+%#define NPY_MAX_ULONGLONG MAX_ULONGLONG
+%#define NPY_MAX_INTP      MAX_INTP
+%#define NPY_MIN_INTP      MIN_INTP
+
+%#define NPY_FARRAY        FARRAY
+%#define NPY_F_CONTIGUOUS  F_CONTIGUOUS
+%#endif
+}
+
+/**********************************************************************/
+
+/* The following code originally appeared in
+ * enthought/kiva/agg/src/numeric.i written by Eric Jones.  It was
+ * translated from C++ to C by John Hunter.  Bill Spotz has modified
+ * it to fix some minor bugs, upgrade from Numeric to numpy (all
+ * versions), add some comments and functionality, and convert from
+ * direct code insertion to SWIG fragments.
+ */
+
+%fragment("NumPy_Macros", "header")
+{
+/* Macros to extract array attributes.
+ */
+%#define is_array(a)            ((a) && PyArray_Check((PyArrayObject *)a))
+%#define array_type(a)          (int)(PyArray_TYPE(a))
+%#define array_numdims(a)       (((PyArrayObject *)a)->nd)
+%#define array_dimensions(a)    (((PyArrayObject *)a)->dimensions)
+%#define array_size(a,i)        (((PyArrayObject *)a)->dimensions[i])
+%#define array_data(a)          (((PyArrayObject *)a)->data)
+%#define array_is_contiguous(a) (PyArray_ISCONTIGUOUS(a))
+%#define array_is_native(a)     (PyArray_ISNOTSWAPPED(a))
+%#define array_is_fortran(a)    (PyArray_ISFORTRAN(a))
+}
+
+/**********************************************************************/
+
+%fragment("NumPy_Utilities", "header")
+{
+  /* Given a PyObject, return a string describing its type.
+   */
+  char* pytype_string(PyObject* py_obj) {
+    if (py_obj == NULL          ) return "C NULL value";
+    if (py_obj == Py_None       ) return "Python None" ;
+    if (PyCallable_Check(py_obj)) return "callable"    ;
+    if (PyString_Check(  py_obj)) return "string"      ;
+    if (PyInt_Check(     py_obj)) return "int"         ;
+    if (PyFloat_Check(   py_obj)) return "float"       ;
+    if (PyDict_Check(    py_obj)) return "dict"        ;
+    if (PyList_Check(    py_obj)) return "list"        ;
+    if (PyTuple_Check(   py_obj)) return "tuple"       ;
+    if (PyFile_Check(    py_obj)) return "file"        ;
+    if (PyModule_Check(  py_obj)) return "module"      ;
+    if (PyInstance_Check(py_obj)) return "instance"    ;
+
+    return "unknow type";
+  }
+
+  /* Given a NumPy typecode, return a string describing the type.
+   */
+  char* typecode_string(int typecode) {
+    static char* type_names[25] = {"bool", "byte", "unsigned byte",
+                                   "short", "unsigned short", "int",
+                                   "unsigned int", "long", "unsigned long",
+                                   "long long", "unsigned long long",
+                                   "float", "double", "long double",
+                                   "complex float", "complex double",
+                                   "complex long double", "object",
+                                   "string", "unicode", "void", "ntypes",
+                                   "notype", "char", "unknown"};
+    return typecode < 24 ? type_names[typecode] : type_names[24];
+  }
+
+  /* Make sure input has correct numpy type.  Allow character and byte
+   * to match.  Also allow int and long to match.  This is deprecated.
+   * You should use PyArray_EquivTypenums() instead.
+   */
+  int type_match(int actual_type, int desired_type) {
+    return PyArray_EquivTypenums(actual_type, desired_type);
+  }
+}
+
+/**********************************************************************/
+
+%fragment("NumPy_Object_to_Array", "header",
+          fragment="NumPy_Backward_Compatibility",
+          fragment="NumPy_Macros",
+          fragment="NumPy_Utilities")
+{
+  /* Given a PyObject pointer, cast it to a PyArrayObject pointer if
+   * legal.  If not, set the python error string appropriately and
+   * return NULL.
+   */
+  PyArrayObject* obj_to_array_no_conversion(PyObject* input, int typecode)
+  {
+    PyArrayObject* ary = NULL;
+    if (is_array(input) && (typecode == NPY_NOTYPE ||
+                            PyArray_EquivTypenums(array_type(input), typecode)))
+    {
+      ary = (PyArrayObject*) input;
+    }
+    else if is_array(input)
+    {
+      char* desired_type = typecode_string(typecode);
+      char* actual_type  = typecode_string(array_type(input));
+      PyErr_Format(PyExc_TypeError,
+                   "Array of type '%s' required.  Array of type '%s' given",
+                   desired_type, actual_type);
+      ary = NULL;
+    }
+    else
+    {
+      char * desired_type = typecode_string(typecode);
+      char * actual_type  = pytype_string(input);
+      PyErr_Format(PyExc_TypeError,
+                   "Array of type '%s' required.  A '%s' was given",
+                   desired_type, actual_type);
+      ary = NULL;
+    }
+    return ary;
+  }
+
+  /* Convert the given PyObject to a NumPy array with the given
+   * typecode.  On success, return a valid PyArrayObject* with the
+   * correct type.  On failure, the python error string will be set and
+   * the routine returns NULL.
+   */
+  PyArrayObject* obj_to_array_allow_conversion(PyObject* input, int typecode,
+                                               int* is_new_object)
+  {
+    PyArrayObject* ary = NULL;
+    PyObject* py_obj;
+    if (is_array(input) && (typecode == NPY_NOTYPE ||
+                            PyArray_EquivTypenums(array_type(input),typecode)))
+    {
+      ary = (PyArrayObject*) input;
+      *is_new_object = 0;
+    }
+    else
+    {
+      py_obj = PyArray_FROMANY(input, typecode, 0, 0, NPY_DEFAULT);
+      /* If NULL, PyArray_FromObject will have set python error value.*/
+      ary = (PyArrayObject*) py_obj;
+      *is_new_object = 1;
+    }
+    return ary;
+  }
+
+  /* Given a PyArrayObject, check to see if it is contiguous.  If so,
+   * return the input pointer and flag it as not a new object.  If it is
+   * not contiguous, create a new PyArrayObject using the original data,
+   * flag it as a new object and return the pointer.
+   */
+  PyArrayObject* make_contiguous(PyArrayObject* ary, int* is_new_object,
+                                 int min_dims, int max_dims)
+  {
+    PyArrayObject* result;
+    if (array_is_contiguous(ary))
+    {
+      result = ary;
+      *is_new_object = 0;
+    }
+    else
+    {
+      result = (PyArrayObject*) PyArray_ContiguousFromObject((PyObject*)ary,
+                                                             array_type(ary),
+                                                             min_dims,
+                                                             max_dims);
+      *is_new_object = 1;
+    }
+    return result;
+  }
+
+  /* Given a PyArrayObject, check to see if it is Fortran-contiguous.
+   * If so, return the input pointer, but do not flag it as not a new
+   * object.  If it is not Fortran-contiguous, create a new
+   * PyArrayObject using the original data, flag it as a new object
+   * and return the pointer.
+   */
+  PyArrayObject* make_fortran(PyArrayObject* ary, int* is_new_object,
+                              int min_dims, int max_dims)
+  {
+    PyArrayObject* result;
+    if (array_is_fortran(ary))
+    {
+      result = ary;
+      *is_new_object = 0;
+    }
+    else
+    {
+      Py_INCREF(ary->descr);
+      result = (PyArrayObject*) PyArray_FromArray(ary, ary->descr, NPY_FORTRAN);
+      *is_new_object = 1;
+    }
+    return result;
+  }
+
+  /* Convert a given PyObject to a contiguous PyArrayObject of the
+   * specified type.  If the input object is not a contiguous
+   * PyArrayObject, a new one will be created and the new object flag
+   * will be set.
+   */
+  PyArrayObject* obj_to_array_contiguous_allow_conversion(PyObject* input,
+                                                          int typecode,
+                                                          int* is_new_object)
+  {
+    int is_new1 = 0;
+    int is_new2 = 0;
+    PyArrayObject* ary2;
+    PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode,
+                                                        &is_new1);
+    if (ary1)
+    {
+      ary2 = make_contiguous(ary1, &is_new2, 0, 0);
+      if ( is_new1 && is_new2)
+      {
+        Py_DECREF(ary1);
+      }
+      ary1 = ary2;
+    }
+    *is_new_object = is_new1 || is_new2;
+    return ary1;
+  }
+
+  /* Convert a given PyObject to a Fortran-ordered PyArrayObject of the
+   * specified type.  If the input object is not a Fortran-ordered
+   * PyArrayObject, a new one will be created and the new object flag
+   * will be set.
+   */
+  PyArrayObject* obj_to_array_fortran_allow_conversion(PyObject* input,
+                                                       int typecode,
+                                                       int* is_new_object)
+  {
+    int is_new1 = 0;
+    int is_new2 = 0;
+    PyArrayObject* ary2;
+    PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode,
+                                                        &is_new1);
+    if (ary1)
+    {
+      ary2 = make_fortran(ary1, &is_new2, 0, 0);
+      if (is_new1 && is_new2)
+      {
+        Py_DECREF(ary1);
+      }
+      ary1 = ary2;
+    }
+    *is_new_object = is_new1 || is_new2;
+    return ary1;
+  }
+
+} /* end fragment */
+
+
+/**********************************************************************/
+
+%fragment("NumPy_Array_Requirements", "header",
+          fragment="NumPy_Backward_Compatibility",
+          fragment="NumPy_Macros")
+{
+  /* Test whether a python object is contiguous.  If array is
+   * contiguous, return 1.  Otherwise, set the python error string and
+   * return 0.
+   */
+  int require_contiguous(PyArrayObject* ary)
+  {
+    int contiguous = 1;
+    if (!array_is_contiguous(ary))
+    {
+      PyErr_SetString(PyExc_TypeError,
+                      "Array must be contiguous.  A non-contiguous array was given");
+      contiguous = 0;
+    }
+    return contiguous;
+  }
+
+  /* Require that a numpy array is not byte-swapped.  If the array is
+   * not byte-swapped, return 1.  Otherwise, set the python error string
+   * and return 0.
+   */
+  int require_native(PyArrayObject* ary)
+  {
+    int native = 1;
+    if (!array_is_native(ary))
+    {
+      PyErr_SetString(PyExc_TypeError,
+                      "Array must have native byteorder.  "
+                      "A byte-swapped array was given");
+      native = 0;
+    }
+    return native;
+  }
+
+  /* Require the given PyArrayObject to have a specified number of
+   * dimensions.  If the array has the specified number of dimensions,
+   * return 1.  Otherwise, set the python error string and return 0.
+   */
+  int require_dimensions(PyArrayObject* ary, int exact_dimensions)
+  {
+    int success = 1;
+    if (array_numdims(ary) != exact_dimensions)
+    {
+      PyErr_Format(PyExc_TypeError,
+                   "Array must have %d dimensions.  Given array has %d dimensions",
+                   exact_dimensions, array_numdims(ary));
+      success = 0;
+    }
+    return success;
+  }
+
+  /* Require the given PyArrayObject to have one of a list of specified
+   * number of dimensions.  If the array has one of the specified number
+   * of dimensions, return 1.  Otherwise, set the python error string
+   * and return 0.
+   */
+  int require_dimensions_n(PyArrayObject* ary, int* exact_dimensions, int n)
+  {
+    int success = 0;
+    int i;
+    char dims_str[255] = "";
+    char s[255];
+    for (i = 0; i < n && !success; i++)
+    {
+      if (array_numdims(ary) == exact_dimensions[i])
+      {
+        success = 1;
+      }
+    }
+    if (!success)
+    {
+      for (i = 0; i < n-1; i++)
+      {
+        sprintf(s, "%d, ", exact_dimensions[i]);
+        strcat(dims_str,s);
+      }
+      sprintf(s, " or %d", exact_dimensions[n-1]);
+      strcat(dims_str,s);
+      PyErr_Format(PyExc_TypeError,
+                   "Array must have %s dimensions.  Given array has %d dimensions",
+                   dims_str, array_numdims(ary));
+    }
+    return success;
+  }
+
+  /* Require the given PyArrayObject to have a specified shape.  If the
+   * array has the specified shape, return 1.  Otherwise, set the python
+   * error string and return 0.
+   */
+  int require_size(PyArrayObject* ary, npy_intp* size, int n)
+  {
+    int i;
+    int success = 1;
+    int len;
+    char desired_dims[255] = "[";
+    char s[255];
+    char actual_dims[255] = "[";
+    for(i=0; i < n;i++)
+    {
+      if (size[i] != -1 &&  size[i] != array_size(ary,i))
+      {
+        success = 0;
+      }
+    }
+    if (!success)
+    {
+      for (i = 0; i < n; i++)
+      {
+        if (size[i] == -1)
+        {
+          sprintf(s, "*,");
+        }
+        else
+        {
+          sprintf(s, "%ld,", (long int)size[i]);
+        }
+        strcat(desired_dims,s);
+      }
+      len = strlen(desired_dims);
+      desired_dims[len-1] = ']';
+      for (i = 0; i < n; i++)
+      {
+        sprintf(s, "%ld,", (long int)array_size(ary,i));
+        strcat(actual_dims,s);
+      }
+      len = strlen(actual_dims);
+      actual_dims[len-1] = ']';
+      PyErr_Format(PyExc_TypeError,
+                   "Array must have shape of %s.  Given array has shape of %s",
+                   desired_dims, actual_dims);
+    }
+    return success;
+  }
+
+  /* Require the given PyArrayObject to to be FORTRAN ordered.  If the
+   * the PyArrayObject is already FORTRAN ordered, do nothing.  Else,
+   * set the FORTRAN ordering flag and recompute the strides.
+   */
+  int require_fortran(PyArrayObject* ary)
+  {
+    int success = 1;
+    int nd = array_numdims(ary);
+    int i;
+    if (array_is_fortran(ary)) return success;
+    /* Set the FORTRAN ordered flag */
+    ary->flags = NPY_FARRAY;
+    /* Recompute the strides */
+    ary->strides[0] = ary->strides[nd-1];
+    for (i=1; i < nd; ++i)
+      ary->strides[i] = ary->strides[i-1] * array_size(ary,i-1);
+    return success;
+  }
+}
+
+/* Combine all NumPy fragments into one for convenience */
+%fragment("NumPy_Fragments", "header",
+          fragment="NumPy_Backward_Compatibility",
+          fragment="NumPy_Macros",
+          fragment="NumPy_Utilities",
+          fragment="NumPy_Object_to_Array",
+          fragment="NumPy_Array_Requirements") { }
+
+/* End John Hunter translation (with modifications by Bill Spotz)
+ */
+
+/* %numpy_typemaps() macro
+ *
+ * This macro defines a family of 41 typemaps that allow C arguments
+ * of the form
+ *
+ *     (DATA_TYPE IN_ARRAY1[ANY])
+ *     (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
+ *     (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
+ *
+ *     (DATA_TYPE IN_ARRAY2[ANY][ANY])
+ *     (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+ *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
+ *     (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+ *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
+ *
+ *     (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
+ *     (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+ *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3)
+ *     (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+ *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3)
+ *
+ *     (DATA_TYPE INPLACE_ARRAY1[ANY])
+ *     (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1)
+ *     (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1)
+ *
+ *     (DATA_TYPE INPLACE_ARRAY2[ANY][ANY])
+ *     (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+ *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2)
+ *     (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+ *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2)
+ *
+ *     (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY])
+ *     (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+ *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3)
+ *     (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+ *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3)
+ *
+ *     (DATA_TYPE ARGOUT_ARRAY1[ANY])
+ *     (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1)
+ *     (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1)
+ *
+ *     (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY])
+ *
+ *     (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY])
+ *
+ *     (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1)
+ *     (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1)
+ *
+ *     (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
+ *     (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2)
+ *     (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
+ *     (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2)
+ *
+ *     (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
+ *     (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3)
+ *     (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
+ *     (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3)
+ *
+ * where "DATA_TYPE" is any type supported by the NumPy module, and
+ * "DIM_TYPE" is any int-like type suitable for specifying dimensions.
+ * The difference between "ARRAY" typemaps and "FARRAY" typemaps is
+ * that the "FARRAY" typemaps expect FORTRAN ordering of
+ * multidimensional arrays.  In python, the dimensions will not need
+ * to be specified (except for the "DATA_TYPE* ARGOUT_ARRAY1"
+ * typemaps).  The IN_ARRAYs can be a numpy array or any sequence that
+ * can be converted to a numpy array of the specified type.  The
+ * INPLACE_ARRAYs must be numpy arrays of the appropriate type.  The
+ * ARGOUT_ARRAYs will be returned as new numpy arrays of the
+ * appropriate type.
+ *
+ * These typemaps can be applied to existing functions using the
+ * %apply directive.  For example:
+ *
+ *     %apply (double* IN_ARRAY1, int DIM1) {(double* series, int length)};
+ *     double prod(double* series, int length);
+ *
+ *     %apply (int DIM1, int DIM2, double* INPLACE_ARRAY2)
+ *           {(int rows, int cols, double* matrix        )};
+ *     void floor(int rows, int cols, double* matrix, double f);
+ *
+ *     %apply (double IN_ARRAY3[ANY][ANY][ANY])
+ *           {(double tensor[2][2][2]         )};
+ *     %apply (double ARGOUT_ARRAY3[ANY][ANY][ANY])
+ *           {(double low[2][2][2]                )};
+ *     %apply (double ARGOUT_ARRAY3[ANY][ANY][ANY])
+ *           {(double upp[2][2][2]                )};
+ *     void luSplit(double tensor[2][2][2],
+ *                  double low[2][2][2],
+ *                  double upp[2][2][2]    );
+ *
+ * or directly with
+ *
+ *     double prod(double* IN_ARRAY1, int DIM1);
+ *
+ *     void floor(int DIM1, int DIM2, double* INPLACE_ARRAY2, double f);
+ *
+ *     void luSplit(double IN_ARRAY3[ANY][ANY][ANY],
+ *                  double ARGOUT_ARRAY3[ANY][ANY][ANY],
+ *                  double ARGOUT_ARRAY3[ANY][ANY][ANY]);
+ */
+
+%define %numpy_typemaps(DATA_TYPE, DATA_TYPECODE, DIM_TYPE)
+
+/************************/
+/* Input Array Typemaps */
+/************************/
+
+/* Typemap suite for (DATA_TYPE IN_ARRAY1[ANY])
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE IN_ARRAY1[ANY])
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE IN_ARRAY1[ANY])
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  npy_intp size[1] = { $1_dim0 };
+  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
+                                                   &is_new_object);
+  if (!array || !require_dimensions(array, 1) ||
+      !require_size(array, size, 1)) SWIG_fail;
+  $1 = ($1_ltype) array_data(array);
+}
+%typemap(freearg)
+  (DATA_TYPE IN_ARRAY1[ANY])
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+/* Typemap suite for (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  npy_intp size[1] = { -1 };
+  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
+                                                   &is_new_object);
+  if (!array || !require_dimensions(array, 1) ||
+      !require_size(array, size, 1)) SWIG_fail;
+  $1 = (DATA_TYPE*) array_data(array);
+  $2 = (DIM_TYPE) array_size(array,0);
+}
+%typemap(freearg)
+  (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  npy_intp size[1] = {-1};
+  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
+                                                   &is_new_object);
+  if (!array || !require_dimensions(array, 1) ||
+      !require_size(array, size, 1)) SWIG_fail;
+  $1 = (DIM_TYPE) array_size(array,0);
+  $2 = (DATA_TYPE*) array_data(array);
+}
+%typemap(freearg)
+  (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+/* Typemap suite for (DATA_TYPE IN_ARRAY2[ANY][ANY])
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE IN_ARRAY2[ANY][ANY])
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE IN_ARRAY2[ANY][ANY])
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  npy_intp size[2] = { $1_dim0, $1_dim1 };
+  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
+                                                   &is_new_object);
+  if (!array || !require_dimensions(array, 2) ||
+      !require_size(array, size, 2)) SWIG_fail;
+  $1 = ($1_ltype) array_data(array);
+}
+%typemap(freearg)
+  (DATA_TYPE IN_ARRAY2[ANY][ANY])
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+/* Typemap suite for (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  npy_intp size[2] = { -1, -1 };
+  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
+                                                   &is_new_object);
+  if (!array || !require_dimensions(array, 2) ||
+      !require_size(array, size, 2)) SWIG_fail;
+  $1 = (DATA_TYPE*) array_data(array);
+  $2 = (DIM_TYPE) array_size(array,0);
+  $3 = (DIM_TYPE) array_size(array,1);
+}
+%typemap(freearg)
+  (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  npy_intp size[2] = { -1, -1 };
+  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
+                                                   &is_new_object);
+  if (!array || !require_dimensions(array, 2) ||
+      !require_size(array, size, 2)) SWIG_fail;
+  $1 = (DIM_TYPE) array_size(array,0);
+  $2 = (DIM_TYPE) array_size(array,1);
+  $3 = (DATA_TYPE*) array_data(array);
+}
+%typemap(freearg)
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+/* Typemap suite for (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  npy_intp size[2] = { -1, -1 };
+  array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE,
+                                                &is_new_object);
+  if (!array || !require_dimensions(array, 2) ||
+      !require_size(array, size, 2) || !require_fortran(array)) SWIG_fail;
+  $1 = (DATA_TYPE*) array_data(array);
+  $2 = (DIM_TYPE) array_size(array,0);
+  $3 = (DIM_TYPE) array_size(array,1);
+}
+%typemap(freearg)
+  (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  npy_intp size[2] = { -1, -1 };
+  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
+                                                   &is_new_object);
+  if (!array || !require_dimensions(array, 2) ||
+      !require_size(array, size, 2) || !require_fortran(array)) SWIG_fail;
+  $1 = (DIM_TYPE) array_size(array,0);
+  $2 = (DIM_TYPE) array_size(array,1);
+  $3 = (DATA_TYPE*) array_data(array);
+}
+%typemap(freearg)
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+/* Typemap suite for (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 };
+  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
+                                                   &is_new_object);
+  if (!array || !require_dimensions(array, 3) ||
+      !require_size(array, size, 3)) SWIG_fail;
+  $1 = ($1_ltype) array_data(array);
+}
+%typemap(freearg)
+  (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+/* Typemap suite for (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2,
+ *                    DIM_TYPE DIM3)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  npy_intp size[3] = { -1, -1, -1 };
+  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
+                                                   &is_new_object);
+  if (!array || !require_dimensions(array, 3) ||
+      !require_size(array, size, 3)) SWIG_fail;
+  $1 = (DATA_TYPE*) array_data(array);
+  $2 = (DIM_TYPE) array_size(array,0);
+  $3 = (DIM_TYPE) array_size(array,1);
+  $4 = (DIM_TYPE) array_size(array,2);
+}
+%typemap(freearg)
+  (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3,
+ *                    DATA_TYPE* IN_ARRAY3)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3)
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3)
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  npy_intp size[3] = { -1, -1, -1 };
+  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
+                                                   &is_new_object);
+  if (!array || !require_dimensions(array, 3) ||
+      !require_size(array, size, 3)) SWIG_fail;
+  $1 = (DIM_TYPE) array_size(array,0);
+  $2 = (DIM_TYPE) array_size(array,1);
+  $3 = (DIM_TYPE) array_size(array,2);
+  $4 = (DATA_TYPE*) array_data(array);
+}
+%typemap(freearg)
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3)
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+/* Typemap suite for (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2,
+ *                    DIM_TYPE DIM3)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  npy_intp size[3] = { -1, -1, -1 };
+  array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE,
+                                                &is_new_object);
+  if (!array || !require_dimensions(array, 3) ||
+      !require_size(array, size, 3) | !require_fortran(array)) SWIG_fail;
+  $1 = (DATA_TYPE*) array_data(array);
+  $2 = (DIM_TYPE) array_size(array,0);
+  $3 = (DIM_TYPE) array_size(array,1);
+  $4 = (DIM_TYPE) array_size(array,2);
+}
+%typemap(freearg)
+  (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3,
+ *                    DATA_TYPE* IN_FARRAY3)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3)
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3)
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  npy_intp size[3] = { -1, -1, -1 };
+  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
+                                                   &is_new_object);
+  if (!array || !require_dimensions(array, 3) ||
+      !require_size(array, size, 3) || !require_fortran(array)) SWIG_fail;
+  $1 = (DIM_TYPE) array_size(array,0);
+  $2 = (DIM_TYPE) array_size(array,1);
+  $3 = (DIM_TYPE) array_size(array,2);
+  $4 = (DATA_TYPE*) array_data(array);
+}
+%typemap(freearg)
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3)
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+/***************************/
+/* In-Place Array Typemaps */
+/***************************/
+
+/* Typemap suite for (DATA_TYPE INPLACE_ARRAY1[ANY])
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE INPLACE_ARRAY1[ANY])
+{
+  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
+                                                 DATA_TYPECODE);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE INPLACE_ARRAY1[ANY])
+  (PyArrayObject* array=NULL)
+{
+  npy_intp size[1] = { $1_dim0 };
+  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
+  if (!array || !require_dimensions(array,1) || !require_size(array, size, 1) ||
+      !require_contiguous(array) || !require_native(array)) SWIG_fail;
+  $1 = ($1_ltype) array_data(array);
+}
+
+/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1)
+{
+  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
+                                                 DATA_TYPECODE);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1)
+  (PyArrayObject* array=NULL, int i=1)
+{
+  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
+  if (!array || !require_dimensions(array,1) || !require_contiguous(array)
+      || !require_native(array)) SWIG_fail;
+  $1 = (DATA_TYPE*) array_data(array);
+  $2 = 1;
+  for (i=0; i < array_numdims(array); ++i) $2 *= array_size(array,i);
+}
+
+/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1)
+{
+  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
+                                                 DATA_TYPECODE);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1)
+  (PyArrayObject* array=NULL, int i=0)
+{
+  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
+  if (!array || !require_dimensions(array,1) || !require_contiguous(array)
+      || !require_native(array)) SWIG_fail;
+  $1 = 1;
+  for (i=0; i < array_numdims(array); ++i) $1 *= array_size(array,i);
+  $2 = (DATA_TYPE*) array_data(array);
+}
+
+/* Typemap suite for (DATA_TYPE INPLACE_ARRAY2[ANY][ANY])
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE INPLACE_ARRAY2[ANY][ANY])
+{
+  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
+                                                 DATA_TYPECODE);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE INPLACE_ARRAY2[ANY][ANY])
+  (PyArrayObject* array=NULL)
+{
+  npy_intp size[2] = { $1_dim0, $1_dim1 };
+  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
+  if (!array || !require_dimensions(array,2) || !require_size(array, size, 2) ||
+      !require_contiguous(array) || !require_native(array)) SWIG_fail;
+  $1 = ($1_ltype) array_data(array);
+}
+
+/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+{
+  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
+                                                 DATA_TYPECODE);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+  (PyArrayObject* array=NULL)
+{
+  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
+  if (!array || !require_dimensions(array,2) || !require_contiguous(array)
+      || !require_native(array)) SWIG_fail;
+  $1 = (DATA_TYPE*) array_data(array);
+  $2 = (DIM_TYPE) array_size(array,0);
+  $3 = (DIM_TYPE) array_size(array,1);
+}
+
+/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2)
+{
+  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
+                                                 DATA_TYPECODE);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2)
+  (PyArrayObject* array=NULL)
+{
+  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
+  if (!array || !require_dimensions(array,2) || !require_contiguous(array) ||
+      !require_native(array)) SWIG_fail;
+  $1 = (DIM_TYPE) array_size(array,0);
+  $2 = (DIM_TYPE) array_size(array,1);
+  $3 = (DATA_TYPE*) array_data(array);
+}
+
+/* Typemap suite for (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+{
+  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
+                                                 DATA_TYPECODE);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
+  (PyArrayObject* array=NULL)
+{
+  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
+  if (!array || !require_dimensions(array,2) || !require_contiguous(array)
+      || !require_native(array) || !require_fortran(array)) SWIG_fail;
+  $1 = (DATA_TYPE*) array_data(array);
+  $2 = (DIM_TYPE) array_size(array,0);
+  $3 = (DIM_TYPE) array_size(array,1);
+}
+
+/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2)
+{
+  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
+                                                 DATA_TYPECODE);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2)
+  (PyArrayObject* array=NULL)
+{
+  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
+  if (!array || !require_dimensions(array,2) || !require_contiguous(array) ||
+      !require_native(array) || !require_fortran(array)) SWIG_fail;
+  $1 = (DIM_TYPE) array_size(array,0);
+  $2 = (DIM_TYPE) array_size(array,1);
+  $3 = (DATA_TYPE*) array_data(array);
+}
+
+/* Typemap suite for (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY])
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY])
+{
+  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
+                                                 DATA_TYPECODE);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY])
+  (PyArrayObject* array=NULL)
+{
+  npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 };
+  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
+  if (!array || !require_dimensions(array,3) || !require_size(array, size, 3) ||
+      !require_contiguous(array) || !require_native(array)) SWIG_fail;
+  $1 = ($1_ltype) array_data(array);
+}
+
+/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2,
+ *                    DIM_TYPE DIM3)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+{
+  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
+                                                 DATA_TYPECODE);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+  (PyArrayObject* array=NULL)
+{
+  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
+  if (!array || !require_dimensions(array,3) || !require_contiguous(array) ||
+      !require_native(array)) SWIG_fail;
+  $1 = (DATA_TYPE*) array_data(array);
+  $2 = (DIM_TYPE) array_size(array,0);
+  $3 = (DIM_TYPE) array_size(array,1);
+  $4 = (DIM_TYPE) array_size(array,2);
+}
+
+/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3,
+ *                    DATA_TYPE* INPLACE_ARRAY3)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3)
+{
+  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
+                                                 DATA_TYPECODE);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3)
+  (PyArrayObject* array=NULL)
+{
+  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
+  if (!array || !require_dimensions(array,3) || !require_contiguous(array)
+      || !require_native(array)) SWIG_fail;
+  $1 = (DIM_TYPE) array_size(array,0);
+  $2 = (DIM_TYPE) array_size(array,1);
+  $3 = (DIM_TYPE) array_size(array,2);
+  $4 = (DATA_TYPE*) array_data(array);
+}
+
+/* Typemap suite for (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2,
+ *                    DIM_TYPE DIM3)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+{
+  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
+                                                 DATA_TYPECODE);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
+  (PyArrayObject* array=NULL)
+{
+  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
+  if (!array || !require_dimensions(array,3) || !require_contiguous(array) ||
+      !require_native(array) || !require_fortran(array)) SWIG_fail;
+  $1 = (DATA_TYPE*) array_data(array);
+  $2 = (DIM_TYPE) array_size(array,0);
+  $3 = (DIM_TYPE) array_size(array,1);
+  $4 = (DIM_TYPE) array_size(array,2);
+}
+
+/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3,
+ *                    DATA_TYPE* INPLACE_FARRAY3)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
+           fragment="NumPy_Macros")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3)
+{
+  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
+                                                 DATA_TYPECODE);
+}
+%typemap(in,
+         fragment="NumPy_Fragments")
+  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3)
+  (PyArrayObject* array=NULL)
+{
+  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
+  if (!array || !require_dimensions(array,3) || !require_contiguous(array)
+      || !require_native(array) || !require_fortran(array)) SWIG_fail;
+  $1 = (DIM_TYPE) array_size(array,0);
+  $2 = (DIM_TYPE) array_size(array,1);
+  $3 = (DIM_TYPE) array_size(array,2);
+  $4 = (DATA_TYPE*) array_data(array);
+}
+
+/*************************/
+/* Argout Array Typemaps */
+/*************************/
+
+/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY1[ANY])
+ */
+%typemap(in,numinputs=0,
+         fragment="NumPy_Backward_Compatibility,NumPy_Macros")
+  (DATA_TYPE ARGOUT_ARRAY1[ANY])
+  (PyObject * array = NULL)
+{
+  npy_intp dims[1] = { $1_dim0 };
+  array = PyArray_SimpleNew(1, dims, DATA_TYPECODE);
+  if (!array) SWIG_fail;
+  $1 = ($1_ltype) array_data(array);
+}
+%typemap(argout)
+  (DATA_TYPE ARGOUT_ARRAY1[ANY])
+{
+  $result = SWIG_Python_AppendOutput($result,array$argnum);
+}
+
+/* Typemap suite for (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1)
+ */
+%typemap(in,numinputs=1,
+         fragment="NumPy_Fragments")
+  (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1)
+  (PyObject * array = NULL)
+{
+  npy_intp dims[1];
+  if (!PyInt_Check($input))
+  {
+    char* typestring = pytype_string($input);
+    PyErr_Format(PyExc_TypeError,
+                 "Int dimension expected.  '%s' given.",
+                 typestring);
+    SWIG_fail;
+  }
+  $2 = (DIM_TYPE) PyInt_AsLong($input);
+  dims[0] = (npy_intp) $2;
+  array = PyArray_SimpleNew(1, dims, DATA_TYPECODE);
+  if (!array) SWIG_fail;
+  $1 = (DATA_TYPE*) array_data(array);
+}
+%typemap(argout)
+  (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1)
+{
+  $result = SWIG_Python_AppendOutput($result,array$argnum);
+}
+
+/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1)
+ */
+%typemap(in,numinputs=1,
+         fragment="NumPy_Fragments")
+  (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1)
+  (PyObject * array = NULL)
+{
+  npy_intp dims[1];
+  if (!PyInt_Check($input))
+  {
+    char* typestring = pytype_string($input);
+    PyErr_Format(PyExc_TypeError,
+                 "Int dimension expected.  '%s' given.",
+                 typestring);
+    SWIG_fail;
+  }
+  $1 = (DIM_TYPE) PyInt_AsLong($input);
+  dims[0] = (npy_intp) $1;
+  array = PyArray_SimpleNew(1, dims, DATA_TYPECODE);
+  if (!array) SWIG_fail;
+  $2 = (DATA_TYPE*) array_data(array);
+}
+%typemap(argout)
+  (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1)
+{
+  $result = SWIG_Python_AppendOutput($result,array$argnum);
+}
+
+/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY])
+ */
+%typemap(in,numinputs=0,
+         fragment="NumPy_Backward_Compatibility,NumPy_Macros")
+  (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY])
+  (PyObject * array = NULL)
+{
+  npy_intp dims[2] = { $1_dim0, $1_dim1 };
+  array = PyArray_SimpleNew(2, dims, DATA_TYPECODE);
+  if (!array) SWIG_fail;
+  $1 = ($1_ltype) array_data(array);
+}
+%typemap(argout)
+  (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY])
+{
+  $result = SWIG_Python_AppendOutput($result,array$argnum);
+}
+
+/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY])
+ */
+%typemap(in,numinputs=0,
+         fragment="NumPy_Backward_Compatibility,NumPy_Macros")
+  (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY])
+  (PyObject * array = NULL)
+{
+  npy_intp dims[3] = { $1_dim0, $1_dim1, $1_dim2 };
+  array = PyArray_SimpleNew(3, dims, DATA_TYPECODE);
+  if (!array) SWIG_fail;
+  $1 = ($1_ltype) array_data(array);
+}
+%typemap(argout)
+  (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY])
+{
+  $result = SWIG_Python_AppendOutput($result,array$argnum);
+}
+
+/*****************************/
+/* Argoutview Array Typemaps */
+/*****************************/
+
+/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1)
+ */
+%typemap(in,numinputs=0)
+  (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1    )
+  (DATA_TYPE*  data_temp        , DIM_TYPE  dim_temp)
+{
+  $1 = &data_temp;
+  $2 = &dim_temp;
+}
+%typemap(argout,
+         fragment="NumPy_Backward_Compatibility")
+  (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1)
+{
+  npy_intp dims[1] = { *$2 };
+  PyObject * array = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$1));
+  if (!array) SWIG_fail;
+  $result = SWIG_Python_AppendOutput($result,array);
+}
+
+/* Typemap suite for (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1)
+ */
+%typemap(in,numinputs=0)
+  (DIM_TYPE* DIM1    , DATA_TYPE** ARGOUTVIEW_ARRAY1)
+  (DIM_TYPE  dim_temp, DATA_TYPE*  data_temp        )
+{
+  $1 = &dim_temp;
+  $2 = &data_temp;
+}
+%typemap(argout,
+         fragment="NumPy_Backward_Compatibility")
+  (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1)
+{
+  npy_intp dims[1] = { *$1 };
+  PyObject * array = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$2));
+  if (!array) SWIG_fail;
+  $result = SWIG_Python_AppendOutput($result,array);
+}
+
+/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
+ */
+%typemap(in,numinputs=0)
+  (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1     , DIM_TYPE* DIM2     )
+  (DATA_TYPE*  data_temp        , DIM_TYPE  dim1_temp, DIM_TYPE  dim2_temp)
+{
+  $1 = &data_temp;
+  $2 = &dim1_temp;
+  $3 = &dim2_temp;
+}
+%typemap(argout,
+         fragment="NumPy_Backward_Compatibility")
+  (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
+{
+  npy_intp dims[2] = { *$2, *$3 };
+  PyObject * array = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1));
+  if (!array) SWIG_fail;
+  $result = SWIG_Python_AppendOutput($result,array);
+}
+
+/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2)
+ */
+%typemap(in,numinputs=0)
+  (DIM_TYPE* DIM1     , DIM_TYPE* DIM2     , DATA_TYPE** ARGOUTVIEW_ARRAY2)
+  (DIM_TYPE  dim1_temp, DIM_TYPE  dim2_temp, DATA_TYPE*  data_temp        )
+{
+  $1 = &dim1_temp;
+  $2 = &dim2_temp;
+  $3 = &data_temp;
+}
+%typemap(argout,
+         fragment="NumPy_Backward_Compatibility")
+  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2)
+{
+  npy_intp dims[2] = { *$1, *$2 };
+  PyObject * array = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3));
+  if (!array) SWIG_fail;
+  $result = SWIG_Python_AppendOutput($result,array);
+}
+
+/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
+ */
+%typemap(in,numinputs=0)
+  (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1     , DIM_TYPE* DIM2     )
+  (DATA_TYPE*  data_temp        , DIM_TYPE  dim1_temp, DIM_TYPE  dim2_temp)
+{
+  $1 = &data_temp;
+  $2 = &dim1_temp;
+  $3 = &dim2_temp;
+}
+%typemap(argout,
+         fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements")
+  (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
+{
+  npy_intp dims[2] = { *$2, *$3 };
+  PyObject * obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1));
+  PyArrayObject * array = (PyArrayObject*) obj;
+  if (!array || !require_fortran(array)) SWIG_fail;
+  $result = SWIG_Python_AppendOutput($result,obj);
+}
+
+/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2)
+ */
+%typemap(in,numinputs=0)
+  (DIM_TYPE* DIM1     , DIM_TYPE* DIM2     , DATA_TYPE** ARGOUTVIEW_FARRAY2)
+  (DIM_TYPE  dim1_temp, DIM_TYPE  dim2_temp, DATA_TYPE*  data_temp        )
+{
+  $1 = &dim1_temp;
+  $2 = &dim2_temp;
+  $3 = &data_temp;
+}
+%typemap(argout,
+         fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements")
+  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2)
+{
+  npy_intp dims[2] = { *$1, *$2 };
+  PyObject * obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3));
+  PyArrayObject * array = (PyArrayObject*) obj;
+  if (!array || !require_fortran(array)) SWIG_fail;
+  $result = SWIG_Python_AppendOutput($result,obj);
+}
+
+/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2,
+                      DIM_TYPE* DIM3)
+ */
+%typemap(in,numinputs=0)
+  (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
+  (DATA_TYPE* data_temp, DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp)
+{
+  $1 = &data_temp;
+  $2 = &dim1_temp;
+  $3 = &dim2_temp;
+  $4 = &dim3_temp;
+}
+%typemap(argout,
+         fragment="NumPy_Backward_Compatibility")
+  (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
+{
+  npy_intp dims[3] = { *$2, *$3, *$4 };
+  PyObject * array = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1));
+  if (!array) SWIG_fail;
+  $result = SWIG_Python_AppendOutput($result,array);
+}
+
+/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3,
+                      DATA_TYPE** ARGOUTVIEW_ARRAY3)
+ */
+%typemap(in,numinputs=0)
+  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3)
+  (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp)
+{
+  $1 = &dim1_temp;
+  $2 = &dim2_temp;
+  $3 = &dim3_temp;
+  $4 = &data_temp;
+}
+%typemap(argout,
+         fragment="NumPy_Backward_Compatibility")
+  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3)
+{
+  npy_intp dims[3] = { *$1, *$2, *$3 };
+  PyObject * array = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$3));
+  if (!array) SWIG_fail;
+  $result = SWIG_Python_AppendOutput($result,array);
+}
+
+/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2,
+                      DIM_TYPE* DIM3)
+ */
+%typemap(in,numinputs=0)
+  (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
+  (DATA_TYPE* data_temp, DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp)
+{
+  $1 = &data_temp;
+  $2 = &dim1_temp;
+  $3 = &dim2_temp;
+  $4 = &dim3_temp;
+}
+%typemap(argout,
+         fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements")
+  (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
+{
+  npy_intp dims[3] = { *$2, *$3, *$4 };
+  PyObject * obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1));
+  PyArrayObject * array = (PyArrayObject*) obj;
+  if (!array || require_fortran(array)) SWIG_fail;
+  $result = SWIG_Python_AppendOutput($result,obj);
+}
+
+/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3,
+                      DATA_TYPE** ARGOUTVIEW_FARRAY3)
+ */
+%typemap(in,numinputs=0)
+  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3)
+  (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp)
+{
+  $1 = &dim1_temp;
+  $2 = &dim2_temp;
+  $3 = &dim3_temp;
+  $4 = &data_temp;
+}
+%typemap(argout,
+         fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements")
+  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3)
+{
+  npy_intp dims[3] = { *$1, *$2, *$3 };
+  PyObject * obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$3));
+  PyArrayObject * array = (PyArrayObject*) obj;
+  if (!array || require_fortran(array)) SWIG_fail;
+  $result = SWIG_Python_AppendOutput($result,obj);
+}
+
+%enddef    /* %numpy_typemaps() macro */
+/* *************************************************************** */
+
+/* Concrete instances of the %numpy_typemaps() macro: Each invocation
+ * below applies all of the typemaps above to the specified data type.
+ */
+%numpy_typemaps(signed char       , NPY_BYTE     , int)
+%numpy_typemaps(unsigned char     , NPY_UBYTE    , int)
+%numpy_typemaps(short             , NPY_SHORT    , int)
+%numpy_typemaps(unsigned short    , NPY_USHORT   , int)
+%numpy_typemaps(int               , NPY_INT      , int)
+%numpy_typemaps(unsigned int      , NPY_UINT     , int)
+%numpy_typemaps(long              , NPY_LONG     , int)
+%numpy_typemaps(unsigned long     , NPY_ULONG    , int)
+%numpy_typemaps(long long         , NPY_LONGLONG , int)
+%numpy_typemaps(unsigned long long, NPY_ULONGLONG, int)
+%numpy_typemaps(float             , NPY_FLOAT    , int)
+%numpy_typemaps(double            , NPY_DOUBLE   , int)
+
+/* ***************************************************************
+ * The follow macro expansion does not work, because C++ bool is 4
+ * bytes and NPY_BOOL is 1 byte
+ *
+ *    %numpy_typemaps(bool, NPY_BOOL, int)
+ */
+
+/* ***************************************************************
+ * On my Mac, I get the following warning for this macro expansion:
+ * 'swig/python detected a memory leak of type 'long double *', no destructor found.'
+ *
+ *    %numpy_typemaps(long double, NPY_LONGDOUBLE, int)
+ */
+
+/* ***************************************************************
+ * Swig complains about a syntax error for the following macro
+ * expansions:
+ *
+ *    %numpy_typemaps(complex float,  NPY_CFLOAT , int)
+ *
+ *    %numpy_typemaps(complex double, NPY_CDOUBLE, int)
+ *
+ *    %numpy_typemaps(complex long double, NPY_CLONGDOUBLE, int)
+ */
+
+#endif /* SWIGPYTHON */
index 35f070a4c3afb10fdcdb2a91f7efcde78186c167..1738163145d7f5c45dc370bfe85faad853b11c68 100644 (file)
@@ -484,7 +484,8 @@ void mglCanvas::DrawAxis(mglAxis &aa, bool text, char arr,const char *stl)
 
        register long i,j,k1,k2;
        SetPenPal(mgl_have_color(stl) ? stl:AxisStl);
-
+       static int cgid=1;      StartGroup("Axis",cgid++);
+       
        p = o + d*aa.v1;        k1 = AddPnt(p,CDef,q,-1,3);
        for(i=1;i<31;i++)       // axis itself
        {
@@ -517,6 +518,7 @@ void mglCanvas::DrawAxis(mglAxis &aa, bool text, char arr,const char *stl)
                        for(v=v0;v<aa.v2;v+=aa.ds)      tick_draw(o+d*v,da,db,1,stl);
        }
        if(text)        DrawLabels(aa);
+       EndGroup();
 }
 //-----------------------------------------------------------------------------
 void mglCanvas::DrawLabels(mglAxis &aa)
@@ -606,9 +608,11 @@ void mglCanvas::Grid(const char *dir, const char *pen)
        AdjustTicks(dir,false);
        SetPenPal(pen);
        // TODO: Ternary axis labeling ...
+       static int cgid=1;      StartGroup("AxisGrid",cgid++);
        if(strchr(dir,'x'))     DrawGrid(ax);
        if(strchr(dir,'y'))     DrawGrid(ay);
        if(strchr(dir,'z'))     DrawGrid(az);
+       EndGroup();
 }
 //-----------------------------------------------------------------------------
 void mglCanvas::DrawGrid(mglAxis &aa)
index a6b5e698d4b2163a88bcb9bc2f8ad4c97598d689..97b406dffd9b36c51bc02abbf056ba7783dae315 100644 (file)
@@ -70,7 +70,7 @@ mglBase::mglBase()
 }\r
 mglBase::~mglBase()    {       ClearEq();      }\r
 //-----------------------------------------------------------------------------\r
-float mglBase::GetRatio()      {       return 1;       }\r
+float mglBase::GetRatio() const        {       return 1;       }\r
 //-----------------------------------------------------------------------------\r
 void mglBase::StartGroup(const char *name, int id)\r
 {\r
@@ -134,10 +134,11 @@ long mglBase::AddPnt(mglPoint p, float c, mglPoint n, float a, int scl)
                q.c=c;  q.t=a;  q.u=n.x;        q.v=n.y;        q.w=n.z;\r
        }\r
        q.x=q.xx=int(p.x*100)*0.01;     q.y=q.yy=p.y;   q.z=q.zz=p.z;\r
-       q.c=c;  q.t=a;  q.u=n.x;        q.v=n.y;        q.w=n.z;\r
-       Txt[long(c)].GetC(c,a,q);       // RGBA color\r
+       q.c=c;  q.t=q.ta=a;     q.u=n.x;        q.v=n.y;        q.w=n.z;\r
+       const mglTexture &txt=Txt[long(c)];\r
+       txt.GetC(c,a,q);        // RGBA color\r
 \r
-       if(!get(MGL_ENABLE_ALPHA))      q.a=1;\r
+       if(!get(MGL_ENABLE_ALPHA))      {       q.a=1;  if(txt.Smooth!=2)       q.ta=1; }\r
        if(scl&8 && scl>0)      q.a=a;  // bypass palette for enabling alpha in Error()\r
        if(!get(MGL_ENABLE_LIGHT) && !(scl&4))  q.u=q.v=NAN;\r
        MGL_PUSH(Pnt,q,mutexPnt);       return Pnt.size()-1;\r
@@ -245,7 +246,7 @@ void mglBase::SetFBord(float x,float y,float z)
        }\r
 }\r
 //-----------------------------------------------------------------------------\r
-bool mglBase::ScalePoint(mglPoint &p, mglPoint &n, bool use_nan)\r
+bool mglBase::ScalePoint(mglPoint &p, mglPoint &n, bool use_nan) const\r
 {\r
        float &x=p.x, &y=p.y, &z=p.z;\r
        if(isnan(x) || isnan(y) || isnan(z))    {       x=NAN;  return false;   }\r
@@ -622,18 +623,18 @@ void mglTexture::Set(const char *s, int smooth, float alpha)
        delete []c;\r
 }\r
 //-----------------------------------------------------------------------------\r
-void mglTexture::GetC(float u,float v,mglPnt &p)\r
+void mglTexture::GetC(float u,float v,mglPnt &p) const\r
 {\r
        u -= long(u);\r
        register long i=long(256*u);    u = u*256-i;\r
-       mglColor *s=col+2*i;\r
+       const mglColor *s=col+2*i;\r
        p.r = (s[0].r*(1-u)+s[2].r*u)*(1-v) + (s[1].r*(1-u)+s[3].r*u)*v;\r
        p.g = (s[0].g*(1-u)+s[2].g*u)*(1-v) + (s[1].g*(1-u)+s[3].g*u)*v;\r
        p.b = (s[0].b*(1-u)+s[2].b*u)*(1-v) + (s[1].b*(1-u)+s[3].b*u)*v;\r
        p.a = (s[0].a*(1-u)+s[2].a*u)*v + (s[1].a*(1-u)+s[3].a*u)*(1-v);        // for alpha use inverted\r
 }\r
 //-----------------------------------------------------------------------------\r
-bool mglTexture::IsSame(mglTexture &t)\r
+bool mglTexture::IsSame(mglTexture &t) const\r
 {      return n==t.n && !memcmp(col,t.col,514*sizeof(mglColor));       }\r
 //-----------------------------------------------------------------------------\r
 long mglBase::AddTexture(const char *cols, int smooth)\r
@@ -754,9 +755,9 @@ char mglBase::SetPenPal(const char *p, long *Id)
        return mk;\r
 }\r
 //-----------------------------------------------------------------------------\r
-float mglBase::GetA(float a)\r
+float mglBase::GetA(float a) const\r
 {\r
-       if(fa)          a = fa->Calc(0,0,0,a);\r
+       if(fa)  a = fa->Calc(0,0,0,a);\r
        a = (a-FMin.c)/(FMax.c-FMin.c);\r
        a = (a<1?(a>0?a:0):1)/MGL_FLT_EPS;      // for texture a must be <1 always!!!\r
        return a;\r
index 1aaf8760fcdbded9c9b5e76621ec717c35082a33..0960ee463520a2d4115b29a8dc79c376fe74f5fb 100644 (file)
@@ -66,7 +66,7 @@ void mglCanvas::GetDrwDat(long i)
 //-----------------------------------------------------------------------------\r
 const unsigned char *mglCanvas::GetBits()      {       Finish();       return G;       }\r
 //-----------------------------------------------------------------------------\r
-float mglCanvas::GetRatio()    {       return inW/inH; }\r
+float mglCanvas::GetRatio() const      {       return inW/inH; }\r
 //-----------------------------------------------------------------------------\r
 void mglCanvas::add_prim(mglPrim &a)\r
 {\r
@@ -81,7 +81,6 @@ void mglCanvas::DefaultPlotParam()
 std::vector<mglTexture> Txt;   ///< Pointer to textures\r
 char *Message;         ///< Buffer for receiving messages\r
 long InUse;                    ///< Smart pointer (number of users)\r
-mglPoint LastMousePos; ///< Last mouse position\r
 mglFont *fnt;          ///< Class for printing vector text\r
 int Quality;           ///< Quality of plot (0x0-pure, 0x1-fast; 0x2-fine; 0x4 - low memory)\r
 int Width;                     ///< Width of the image\r
@@ -114,7 +113,7 @@ GifFileType *gif;*/
 //-----------------------------------------------------------------------------\r
 //     Optimal axis position\r
 //-----------------------------------------------------------------------------\r
-float mglCanvas::FindOptOrg(char dir, int ind)\r
+float mglCanvas::FindOptOrg(char dir, int ind) const\r
 {\r
        static mglPoint px, py, pz, m1, m2;\r
        static mglMatrix bb;    bb.b[0]=1e30;\r
@@ -179,7 +178,7 @@ float mglCanvas::FindOptOrg(char dir, int ind)
        return res;\r
 }\r
 //-----------------------------------------------------------------------------\r
-float mglCanvas::GetOrgX(char dir)\r
+float mglCanvas::GetOrgX(char dir) const\r
 {\r
        float res = Org.x;\r
        if(isnan(res))\r
@@ -191,7 +190,7 @@ float mglCanvas::GetOrgX(char dir)
        return res;\r
 }\r
 //-----------------------------------------------------------------------------\r
-float mglCanvas::GetOrgY(char dir)\r
+float mglCanvas::GetOrgY(char dir) const\r
 {\r
        float res = Org.y;\r
        if(isnan(res))\r
@@ -203,7 +202,7 @@ float mglCanvas::GetOrgY(char dir)
        return res;\r
 }\r
 //-----------------------------------------------------------------------------\r
-float mglCanvas::GetOrgZ(char dir)\r
+float mglCanvas::GetOrgZ(char dir) const\r
 {\r
        float res = Org.z;\r
        if(isnan(res))\r
@@ -539,7 +538,7 @@ void mglCanvas::Zoom(float x1, float y1, float x2, float y2)
        Bp.x=(x1+x2)/2/Bp.b[0]; Bp.y=(y1+y2)/2/Bp.b[4];\r
 }\r
 //-----------------------------------------------------------------------------\r
-int mglCanvas::GetSplId(long x,long y)\r
+int mglCanvas::GetSplId(long x,long y) const\r
 {\r
        register long i,id=-1;\r
        for(i=Sub.size()-1;i>=0;i--)\r
@@ -591,6 +590,8 @@ void mglCanvas::arrow_plot(long n1, long n2,char st)
        ll = hypot(lx,ly)/(PenWidth*ArrowSize*0.35*font_factor);\r
        if(ll==0)       return;\r
        lx /= ll;       ly /= ll;       kx = ly;        ky = -lx;\r
+       float lz = (p2.z-p1.z)/ll;\r
+\r
        Reserve(6);\r
        long k1,k2,k3,k4;\r
 \r
@@ -601,43 +602,43 @@ void mglCanvas::arrow_plot(long n1, long n2,char st)
                q2.xx=q2.x=p1.x-kx;             q2.yy=q2.y=p1.y-ky;             k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
                line_plot(k1,k2);       break;\r
        case 'D':\r
-               q1.xx=q1.x=p1.x+kx;             q1.yy=q1.y=p1.y+ky;             k1=Pnt.size();  MGL_PUSH(Pnt,q1,mutexPnt);\r
-               q2.xx=q2.x=p1.x+lx;             q2.yy=q2.y=p1.y+ly;             k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
-               q3.xx=q3.x=p1.x-kx;             q3.yy=q3.y=p1.y-ky;             k3=Pnt.size();  MGL_PUSH(Pnt,q3,mutexPnt);\r
-               q4.xx=q4.x=p1.x-lx;             q4.yy=q4.y=p1.y-ly;             k4=Pnt.size();  MGL_PUSH(Pnt,q4,mutexPnt);\r
+               q1.xx=q1.x=p1.x+kx;             q1.yy=q1.y=p1.y+ky;                                                     k1=Pnt.size();  MGL_PUSH(Pnt,q1,mutexPnt);\r
+               q2.xx=q2.x=p1.x+lx;             q2.yy=q2.y=p1.y+ly;             q2.zz=q2.z=p1.z+lz;     k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
+               q3.xx=q3.x=p1.x-kx;             q3.yy=q3.y=p1.y-ky;                                                     k3=Pnt.size();  MGL_PUSH(Pnt,q3,mutexPnt);\r
+               q4.xx=q4.x=p1.x-lx;             q4.yy=q4.y=p1.y-ly;             q4.zz=q4.z=p1.z-lz;     k4=Pnt.size();  MGL_PUSH(Pnt,q4,mutexPnt);\r
                quad_plot(k1,k2,k4,k3); break;\r
        case 'S':\r
-               q1.xx=q1.x=p1.x+kx-lx;  q1.yy=q1.y=p1.y+ky-ly;  k1=Pnt.size();  MGL_PUSH(Pnt,q1,mutexPnt);\r
-               q2.xx=q2.x=p1.x-kx-lx;  q2.yy=q2.y=p1.y-ky-ly;  k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
-               q3.xx=q3.x=p1.x-kx+lx;  q3.yy=q3.y=p1.y-ky+ly;  k3=Pnt.size();  MGL_PUSH(Pnt,q3,mutexPnt);\r
-               q4.xx=q4.x=p1.x+kx+lx;  q4.yy=q4.y=p1.y+ky+ly;  k4=Pnt.size();  MGL_PUSH(Pnt,q4,mutexPnt);\r
+               q1.xx=q1.x=p1.x+kx-lx;  q1.yy=q1.y=p1.y+ky-ly;  q1.zz=q1.z=p1.z-lz;     k1=Pnt.size();  MGL_PUSH(Pnt,q1,mutexPnt);\r
+               q2.xx=q2.x=p1.x-kx-lx;  q2.yy=q2.y=p1.y-ky-ly;  q2.zz=q2.z=p1.z-lz;     k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
+               q3.xx=q3.x=p1.x-kx+lx;  q3.yy=q3.y=p1.y-ky+ly;  q3.zz=q3.z=p1.z+lz;     k3=Pnt.size();  MGL_PUSH(Pnt,q3,mutexPnt);\r
+               q4.xx=q4.x=p1.x+kx+lx;  q4.yy=q4.y=p1.y+ky+ly;  q4.zz=q4.z=p1.z+lz;     k4=Pnt.size();  MGL_PUSH(Pnt,q4,mutexPnt);\r
                quad_plot(k1,k2,k4,k3); break;\r
        case 'T':\r
-               q1.xx=q1.x=p1.x+kx-lx;  q1.yy=q1.y=p1.y+ky-ly;  k1=Pnt.size();  MGL_PUSH(Pnt,q1,mutexPnt);\r
-               q2.xx=q2.x=p1.x-kx-lx;  q2.yy=q2.y=p1.y-ky-ly;  k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
-               q3.xx=q3.x=p1.x+lx;             q3.yy=q3.y=p1.y+ly;             k3=Pnt.size();  MGL_PUSH(Pnt,q3,mutexPnt);\r
+               q1.xx=q1.x=p1.x+kx-lx;  q1.yy=q1.y=p1.y+ky-ly;  q1.zz=q1.z=p1.z-lz;     k1=Pnt.size();  MGL_PUSH(Pnt,q1,mutexPnt);\r
+               q2.xx=q2.x=p1.x-kx-lx;  q2.yy=q2.y=p1.y-ky-ly;  q2.zz=q2.z=p1.z-lz;     k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
+               q3.xx=q3.x=p1.x+lx;             q3.yy=q3.y=p1.y+ly;             q3.zz=q3.z=p1.z+lz;     k3=Pnt.size();  MGL_PUSH(Pnt,q3,mutexPnt);\r
                trig_plot(k1,k2,k3);    break;\r
        case 'A':\r
 //             q1.xx=q1.x=p1.x;                        q1.yy=q1.y=p1.y;                        k1=Pnt.size();  MGL_PUSH(Pnt,q1,mutexPnt);\r
-               q2.xx=q2.x=p1.x-kx-2*lx;        q2.yy=q2.y=p1.y-ky-2*ly;        k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
-               q3.xx=q3.x=p1.x-1.5*lx;         q3.yy=q3.y=p1.y-1.5*ly;         k3=Pnt.size();  MGL_PUSH(Pnt,q3,mutexPnt);\r
-               q4.xx=q4.x=p1.x+kx-2*lx;        q4.yy=q4.y=p1.y+ky-2*ly;        k4=Pnt.size();  MGL_PUSH(Pnt,q4,mutexPnt);\r
-               trig_plot(n1,k2,k3);            trig_plot(n1,k4,k3);    break;\r
+               q2.xx=q2.x=p1.x-kx-2*lx;        q2.yy=q2.y=p1.y-ky-2*ly;        q2.zz=q2.z=p1.z-2*lz;   k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
+               q3.xx=q3.x=p1.x-1.5*lx;         q3.yy=q3.y=p1.y-1.5*ly;         q3.zz=q3.z=p1.z-1.5*lz; k3=Pnt.size();  MGL_PUSH(Pnt,q3,mutexPnt);\r
+               q4.xx=q4.x=p1.x+kx-2*lx;        q4.yy=q4.y=p1.y+ky-2*ly;        q4.zz=q4.z=p1.z-2*lz;   k4=Pnt.size();  MGL_PUSH(Pnt,q4,mutexPnt);\r
+               trig_plot(n1,k2,k3);            trig_plot(n1,k3,k4);    break;\r
        case 'K':\r
 //             q1.xx=q1.x=p1.x;                        q1.yy=q1.y=p1.y;                        k1=Pnt.size();  MGL_PUSH(Pnt,q1,mutexPnt);\r
-               q2.xx=q2.x=p1.x-kx-2*lx;        q2.yy=q2.y=p1.y-ky-2*ly;        k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
-               q3.xx=q3.x=p1.x-1.5*lx;         q3.yy=q3.y=p1.y-1.5*ly;         k3=Pnt.size();  MGL_PUSH(Pnt,q3,mutexPnt);\r
-               q4.xx=q4.x=p1.x+kx-2*lx;        q4.yy=q4.y=p1.y+ky-2*ly;        k4=Pnt.size();  MGL_PUSH(Pnt,q4,mutexPnt);\r
-               trig_plot(n1,k2,k3);            trig_plot(n1,k4,k3);\r
+               q2.xx=q2.x=p1.x-kx-2*lx;        q2.yy=q2.y=p1.y-ky-2*ly;        q2.zz=q2.z=p1.z-2*lz;   k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
+               q3.xx=q3.x=p1.x-1.5*lx;         q3.yy=q3.y=p1.y-1.5*ly;         q3.zz=q3.z=p1.z-1.5*lz; k3=Pnt.size();  MGL_PUSH(Pnt,q3,mutexPnt);\r
+               q4.xx=q4.x=p1.x+kx-2*lx;        q4.yy=q4.y=p1.y+ky-2*ly;        q4.zz=q4.z=p1.z-2*lz;   k4=Pnt.size();  MGL_PUSH(Pnt,q4,mutexPnt);\r
+               trig_plot(n1,k2,k3);            trig_plot(n1,k3,k4);\r
                q1.xx=q1.x=p1.x+kx;                     q1.yy=q1.y=p1.y+ky;                     k1=Pnt.size();  MGL_PUSH(Pnt,q1,mutexPnt);\r
                q2.xx=q2.x=p1.x-kx;                     q2.yy=q2.y=p1.y-ky;                     k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
                line_plot(k1,k2);       break;\r
        case 'V':\r
 //             q1.xx=q1.x=p1.x;                        q1.yy=q1.y=p1.y;                        k1=Pnt.size();  MGL_PUSH(Pnt,q1,mutexPnt);\r
-               q2.xx=q2.x=p1.x-kx+2*lx;        q2.yy=q2.y=p1.y-ky+2*ly;        k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
-               q3.xx=q3.x=p1.x+1.5*lx;         q3.yy=q3.y=p1.y+1.5*ly;         k3=Pnt.size();  MGL_PUSH(Pnt,q3,mutexPnt);\r
-               q4.xx=q4.x=p1.x+kx+2*lx;        q4.yy=q4.y=p1.y+ky+2*ly;        k4=Pnt.size();  MGL_PUSH(Pnt,q4,mutexPnt);\r
-               trig_plot(n1,k2,k3);            trig_plot(n1,k4,k3);    break;\r
+               q2.xx=q2.x=p1.x-kx+2*lx;        q2.yy=q2.y=p1.y-ky+2*ly;        q2.zz=q2.z=p1.z-2*lz;   k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
+               q3.xx=q3.x=p1.x+1.5*lx;         q3.yy=q3.y=p1.y+1.5*ly;         q3.zz=q3.z=p1.z-1.5*lz; k3=Pnt.size();  MGL_PUSH(Pnt,q3,mutexPnt);\r
+               q4.xx=q4.x=p1.x+kx+2*lx;        q4.yy=q4.y=p1.y+ky+2*ly;        q4.zz=q4.z=p1.z-2*lz;   k4=Pnt.size();  MGL_PUSH(Pnt,q4,mutexPnt);\r
+               trig_plot(n1,k2,k3);            trig_plot(n1,k3,k4);    break;\r
        case 'O':\r
                {\r
                        q1.xx=q1.x=p1.x;        q1.yy=q1.y=p1.y;        k1=Pnt.size();  MGL_PUSH(Pnt,q1,mutexPnt);\r
@@ -645,10 +646,10 @@ void mglCanvas::arrow_plot(long n1, long n2,char st)
                        for(int i=0;i<16;i++)\r
                        {\r
                                t = M_PI*i/8.;          s=sin(t);       c=cos(t);\r
-                               q2.xx=q2.x=p1.x+kx*s+lx*c;      q2.yy=q2.y=p1.y+ky*s+ly*c;\r
+                               q2.xx=q2.x=p1.x+kx*s+lx*c;      q2.yy=q2.y=p1.y+ky*s+ly*c;      q2.zz=q2.z=p1.z+c*lz;\r
                                k2=Pnt.size();  MGL_PUSH(Pnt,q2,mutexPnt);\r
                                t = M_PI*(i+1)/8.;      s=sin(t);       c=cos(t);\r
-                               q3.xx=q3.x=p1.x+kx*s+lx*c;      q3.yy=q3.y=p1.y+ky*s+ly*c;\r
+                               q3.xx=q3.x=p1.x+kx*s+lx*c;      q3.yy=q3.y=p1.y+ky*s+ly*c;      q3.zz=q2.z=p1.z+c*lz;\r
                                k3=Pnt.size();  MGL_PUSH(Pnt,q3,mutexPnt);\r
                                trig_plot(k1,k2,k3);\r
                        }\r
@@ -699,7 +700,7 @@ void mglCanvas::Legend(const std::vector<mglText> &leg, float x, float y, const
        if(k4==2)       k2=0;\r
        if(k4==1)       k1=k2=0;\r
        float c1=AddTexture(char(k1?k1:'w')), c2=AddTexture(char(k2?k2:'k'));\r
-       if((Flag&3)==2) {       float cc=c1;    c2=c2;  c2=cc;  };\r
+       if((Flag&3)==2) {       float cc=c1;    c2=c1;  c2=cc;  };\r
 \r
        if(strchr(ff,'#'))      // draw bounding box\r
        {\r
@@ -755,7 +756,7 @@ void mglCanvas::Title(const wchar_t *title,const char *stl,float size)
        if(box) //      draw boungind box\r
        {\r
                float c1=AddTexture('w'), c2=AddTexture('k');\r
-               if((Flag&3)==2) {       float cc=c1;    c2=c2;  c2=cc;  };\r
+               if((Flag&3)==2) {       float cc=c1;    c2=c1;  c2=cc;  };\r
                long k1,k2,k3,k4;\r
                k1=AddPnt(mglPoint(x,y,Depth),c1,q,-1,0);\r
                k2=AddPnt(mglPoint(x+inW,y,Depth),c1,q,-1,0);\r
index 9150eb63a5f7925eccb0868341ffe8424f8ca1e0..6e8b393756ba7e4e2406d07cda04d2414e43cf4b 100644 (file)
@@ -243,10 +243,6 @@ void mgl_label_ext(HMGL gr, char dir, const char *text, float pos, float shift)
 {      _Gr_->Label(dir,text,pos,shift);        }\r
 void mgl_labelw_ext(HMGL gr, char dir, const wchar_t *text, float pos, float shift)\r
 {      _Gr_->Labelw(dir,text,pos,shift);       }\r
-void mgl_label_pos(HMGL gr, float x, float y, const char *text, const char *fnt)\r
-{      _Gr_->Label(x,y,text,fnt);      }\r
-void mgl_labelw_pos(HMGL gr, float x, float y, const wchar_t *text, const char *fnt)\r
-{      _Gr_->Labelw(x,y,text,fnt);     }\r
 //-----------------------------------------------------------------------------\r
 void mgl_colorbar(HMGL gr, const char *sch)\r
 {      _Gr_->Colorbar(sch);    }\r
@@ -324,10 +320,6 @@ void mgl_label_(uintptr_t *gr, const char *dir, const char *text,int,int l)
 void mgl_label_ext_(uintptr_t *gr, const char *dir, const char *text, float *pos, float *shift,int,int l)\r
 {      char *s=new char[l+1];  memcpy(s,text,l);       s[l]=0;\r
        _GR_->Label(*dir, s, *pos, *shift);     delete []s;     }\r
-void mgl_label_pos_(uintptr_t *gr, float *x, float *y, const char *txt, const char *fnt,int l,int n)\r
-{      char *s=new char[l+1];  memcpy(s,txt,l);        s[l]=0;\r
-       char *p=new char[n+1];  memcpy(p,fnt,n);        p[n]=0;\r
-       _GR_->Label(*x,*y,s,p); delete []s;     delete []p;     }\r
 //-----------------------------------------------------------------------------\r
 void mgl_colorbar_(uintptr_t *gr, const char *sch,int l)\r
 {      char *s=new char[l+1];  memcpy(s,sch,l);        s[l]=0;\r
@@ -393,3 +385,8 @@ float mgl_eval_expr_(uintptr_t *ex, float *x, float *y,float *z)
 float mgl_diff_expr_(uintptr_t *ex, const char *dir, float *x, float *y,float *z, int)\r
 {      return mgl_expr_diff((HMEX) ex, *dir,*x,*y,*z); }\r
 //-----------------------------------------------------------------------------\r
+void mgl_set_plotfactor(HMGL gr, float val)\r
+{      _Gr_->SetPlotFactor(val);       }\r
+void mgl_set_plotfactor_(uintptr_t *gr, float *val)\r
+{      _GR_->SetPlotFactor(*val);      }\r
+//-----------------------------------------------------------------------------\r
index a80102cebb312f6b275332ea72a2c0f87fa9822c..865413c89b3ca8c585c92ec6fb306c1c4351ccca 100644 (file)
@@ -2471,9 +2471,7 @@ void mglc_tlabel(wchar_t out[1024], long , mglArg *a, int k[10], const char *)
 //-----------------------------------------------------------------------------
 int mgls_label(mglGraph *gr, long , mglArg *a, int k[10], const char *opt)
 {
-       if(k[0]==3 && k[1]==3 && k[2]==2)
-               gr->Label(a[0].v, a[1].v, a[2].w.c_str(), k[3]==2?a[3].s.c_str():"");
-       else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==2)
+       if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==2)
                gr->Label(*(a[0].d), *(a[1].d), *(a[2].d), a[3].w.c_str(), k[4]==2?a[4].s.c_str():"", opt);
        else if(k[0]==1 && k[1]==1 && k[2]==2)
                gr->Label(*(a[0].d), *(a[1].d), a[2].w.c_str(), k[3]==2?a[3].s.c_str():"", opt);
@@ -2484,9 +2482,7 @@ int mgls_label(mglGraph *gr, long , mglArg *a, int k[10], const char *opt)
 }
 void mglc_label(wchar_t out[1024], long , mglArg *a, int k[10], const char *opt)
 {
-       if(k[0]==3 && k[1]==3 && k[2]==2)
-               mglprintf(out,1024,L"gr->Label(%g, %g, \"%ls\", \"%s\");", a[0].v, a[1].v, a[2].w.c_str(), k[3]==2?a[3].s.c_str():"");
-       else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==2)
+       if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==2)
                mglprintf(out,1024,L"gr->Label(%s, %s, %s, \"%ls\", \"%s\", \"%s\");", a[0].s.c_str(), a[1].s.c_str(), a[2].s.c_str(), a[3].w.c_str(), k[4]==2?a[4].s.c_str():"", opt);
        else if(k[0]==1 && k[1]==1 && k[2]==2)
                mglprintf(out,1024,L"gr->Label(%s, %s, \"%ls\", \"%s\", \"%s\");", a[0].s.c_str(), a[1].s.c_str(), a[2].w.c_str(), k[3]==2?a[3].s.c_str():"", opt);
@@ -3226,14 +3222,12 @@ void mglc_export(wchar_t out[1024], long , mglArg *a, int k[10], const char *)
 //-----------------------------------------------------------------------------
 int mgls_write(mglGraph *gr, long , mglArg *a, int k[10], const char *)
 {
-       if(k[0]==2)     gr->WriteFrame(a[0].s.c_str(), "MathGL");
-       else    return 1;
+       gr->WriteFrame(k[0]==2?a[0].s.c_str():"", "MathGL");
        return 0;
 }
 void mglc_write(wchar_t out[1024], long , mglArg *a, int k[10], const char *)
 {
-       if(k[0]==2)
-               mglprintf(out,1024,L"gr->WriteFrame(\"%s\", \"MathGL\");", a[0].s.c_str());
+       mglprintf(out,1024,L"gr->WriteFrame(\"%s\", \"MathGL\");", k[0]==2?a[0].s.c_str():"");
 }
 //-----------------------------------------------------------------------------
 int mgls_region(mglGraph *gr, long , mglArg *a, int k[10], const char *opt)
index c56d94eacb6e4bee9cdcbff2f3c23b55d06d3965..23dc428d02496377e4caa57eb71e39e011742255 100644 (file)
@@ -29,7 +29,7 @@ int mgl_tga_save(const char *fname, int w, int h, unsigned char **p);
 int mgl_pnga_save(const char *fname, int w, int h, unsigned char **p);\r
 void mgl_printf(void *fp, bool gz, const char *str, ...);\r
 //-----------------------------------------------------------------------------\r
-void mglTexture::GetRGBA(unsigned char *f)\r
+void mglTexture::GetRGBA(unsigned char *f) const\r
 {\r
        register long i,j,i0;\r
        mglColor c1,c2,c;\r
@@ -256,7 +256,7 @@ void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png)
        delete []ng;\r
 \r
        unsigned len=strlen(fname),ntxt=gr->GetTxtNum();\r
-       char *tname = new char[len+1];  strcpy(tname,fname);\r
+       char *tname = new char[len+5];  strcpy(tname,fname);\r
        FILE *fp=fopen(fname,"wt");\r
        // vertices definition\r
        fprintf(fp,"# Created by MathGL library\n# Title: %s\n",(descr && *descr) ? descr : fname);\r
@@ -264,7 +264,7 @@ void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png)
        {\r
                mglPnt pp = gr->GetPnt(i);\r
                fprintf(fp,"v %g %g %g\n",pp.x,pp.y,pp.z);\r
-               fprintf(fp,"vt %g %g\n",pp.t,pp.c/ntxt);\r
+               fprintf(fp,"vt %g %g\n",1-pp.ta,pp.c/ntxt);\r
 //             if(isnan(pp.u)) fprintf(fp,"vn 0 0 0\n");\r
 //             else fprintf(fp,"vn %g %g %g\n",pp.u,pp.v,pp.w);\r
        }\r
@@ -298,10 +298,10 @@ void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png)
        fprintf(fp,"Kd 1.000 1.000 1.000\n");\r
        fprintf(fp,"Ks 0.000 0.000 0.000\n");\r
        fprintf(fp,"d 1.0\nillum 2\n");\r
-       if(use_png)\r
-       {       tname[len-4]='.';       tname[len-3]='p';       tname[len-2]='n';       tname[len-1]='g';       }\r
-       else\r
-       {       tname[len-4]='.';       tname[len-3]='t';       tname[len-2]='g';       tname[len-1]='a';       }\r
+       if(use_png)     strcat(tname,"_txt.png");\r
+//     {       tname[len-4]='.';       tname[len-3]='p';       tname[len-2]='n';       tname[len-1]='g';       }\r
+       else            strcat(tname,"_txt.tga");\r
+//     {       tname[len-4]='.';       tname[len-3]='t';       tname[len-2]='g';       tname[len-1]='a';       }\r
        fprintf(fp,"map_Ka %s\nmap_Kd %s\nmap_Ks %s\n",tname,tname,tname);\r
        fclose(fp);\r
        // prepare texture file (TGA or PNG)\r
@@ -490,12 +490,12 @@ bool mglCanvas::ExportMGLD(const char *fname, const char *descr)
        if(!fp) return true;\r
        // NOTE: I'll save Ptx. So prim type=6 is useless,and no LaTeX\r
        fprintf(fp,"MGLD %lu %lu %lu\n# %s\n", Pnt.size(), Prm.size(), Txt.size(), (descr && *descr) ? descr : fname);\r
-       register size_t i,j;\r
-       fprintf(fp,"# Vertexes: x y z c t u v w r g b a\n");\r
+       register size_t i;\r
+       fprintf(fp,"# Vertexes: x y z c t ta u v w r g b a\n");\r
        for(i=0;i<Pnt.size();i++)\r
        {\r
                const mglPnt &q=Pnt[i];\r
-               fprintf(fp,"%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\n", q.xx, q.yy, q.zz, q.c, q.t, q.u, q.v, q.w, q.r, q.g, q.b, q.a);\r
+               fprintf(fp,"%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\t%.4g\n", q.xx, q.yy, q.zz, q.c, q.t, q.ta, q.u, q.v, q.w, q.r, q.g, q.b, q.a);\r
        }\r
        fprintf(fp,"# Primitives: type n1 n2 n3 n4 id s w p\n");\r
        for(i=0;i<Prm.size();i++)\r
@@ -528,17 +528,17 @@ bool mglCanvas::ImportMGLD(const char *fname, bool add)
        if(!fgets(buf,512,fp))  *buf=0;\r
        if(strncmp(buf,"MGLD",4))       {       delete []buf;   fclose(fp);     return true;    }\r
        register size_t i;\r
-       size_t n,m,l;\r
+       size_t n,m,l, npnt;\r
        sscanf(buf+5,"%lu%lu%lu",&n,&m,&l);\r
        if(n<=0 || m<=0 || l<=0)        {       delete []buf;   fclose(fp);     return true;    }\r
        if(!add)        {       Clf();  Txt.clear();    }\r
-       else    ClfZB();\r
+       else    {       ClfZB();        npnt=Pnt.size();        }\r
        Pnt.reserve(n); Prm.reserve(m); Txt.reserve(l);\r
        mglPnt p;\r
        for(i=0;i<n;i++)\r
        {\r
                do {    if(!fgets(buf,512,fp))  *buf=0; mgl_strtrim(buf);       } while(*buf=='#');\r
-               sscanf(buf,"%g%g%g%g%g%g%g%g%g%g%g%g", &p.xx, &p.yy, &p.zz, &p.c, &p.t, &p.u, &p.v, &p.w, &p.r, &p.g, &p.b, &p.a);\r
+               sscanf(buf,"%g%g%g%g%g%g%g%g%g%g%g%g%g", &p.xx, &p.yy, &p.zz, &p.c, &p.t, &p.ta, &p.u, &p.v, &p.w, &p.r, &p.g, &p.b, &p.a);\r
                Pnt.push_back(p);\r
        }\r
        mglPrim q;\r
@@ -546,8 +546,14 @@ bool mglCanvas::ImportMGLD(const char *fname, bool add)
        {\r
                do {    if(!fgets(buf,512,fp))  *buf=0; mgl_strtrim(buf);       } while(*buf=='#');\r
                sscanf(buf,"%d%ld%ld%ld%ld%d%g%g%g", &q.type, &q.n1, &q.n2, &q.n3, &q.n4, &q.id, &q.s, &q.w, &q.p);\r
-               if(q.type>4)    continue;\r
-               Prm.push_back(q);\r
+               q.n1 = q.n1>=0?q.n1+npnt:-1;\r
+               q.n2 = q.n2>=0?q.n2+npnt:-1;\r
+               if(q.type==2 || q.type==3)\r
+               {\r
+                       q.n3 = q.n3>=0?q.n3+npnt:-1;\r
+                       q.n4 = q.n4>=0?q.n4+npnt:-1;\r
+               }\r
+               if(q.type<5)    Prm.push_back(q);\r
        }\r
        mglTexture t;\r
        for(i=0;i<l;i++)\r
index 9626b5acee68eba5a23a181c77e25e7e1fb3cda7..d9d996e8a9e1ea1f4e97bd6b21583a47ca71eb6f 100644 (file)
@@ -69,7 +69,7 @@ char mglGetStyle(const char *how, int *font, int *align)
        return col;\r
 }\r
 //-----------------------------------------------------------------------------\r
-float mglFont::Puts(const char *str,const char *how,float col)\r
+float mglFont::Puts(const char *str,const char *how,float col) const\r
 {\r
        int font=0, align=1;\r
        char cc=mglGetStyle(how,&font,&align);\r
@@ -81,7 +81,7 @@ float mglFont::Puts(const char *str,const char *how,float col)
        return w;\r
 }\r
 //-----------------------------------------------------------------------------\r
-float mglFont::Width(const char *str,const char *how)\r
+float mglFont::Width(const char *str,const char *how) const\r
 {\r
        int font=0;\r
        mglGetStyle(how,&font);\r
@@ -93,21 +93,21 @@ float mglFont::Width(const char *str,const char *how)
        return w;\r
 }\r
 //-----------------------------------------------------------------------------\r
-float mglFont::Puts(const wchar_t *str,const char *how,float col)\r
+float mglFont::Puts(const wchar_t *str,const char *how,float col) const\r
 {\r
        int font=0, align=1;\r
        char cc=mglGetStyle(how,&font,&align);\r
        return Puts(str, font, align,cc?-cc:col);\r
 }\r
 //-----------------------------------------------------------------------------\r
-float mglFont::Width(const wchar_t *str,const char *how)\r
+float mglFont::Width(const wchar_t *str,const char *how) const\r
 {\r
        int font=0;\r
        mglGetStyle(how,&font);\r
        return Width(str, font);\r
 }\r
 //-----------------------------------------------------------------------------\r
-float mglFont::Puts(const wchar_t *str,int font,int align, float col)\r
+float mglFont::Puts(const wchar_t *str,int font,int align, float col) const\r
 {\r
        if(numg==0)     return 0;\r
        float ww=0,w=0,h = (align&4) ? 500./fact[0] : 0;\r
@@ -156,7 +156,7 @@ float mglFont::Puts(const wchar_t *str,int font,int align, float col)
        return ww;\r
 }\r
 //-----------------------------------------------------------------------------\r
-float mglFont::Width(const wchar_t *str,int font)\r
+float mglFont::Width(const wchar_t *str,int font) const\r
 {\r
        if(numg==0)     return 0;\r
        float ww=0,w=0;\r
@@ -189,14 +189,14 @@ float mglFont::Width(const wchar_t *str,int font)
        return w;\r
 }\r
 //-----------------------------------------------------------------------------\r
-float mglFont::Height(int font)\r
+float mglFont::Height(int font) const\r
 {\r
        if(numg==0)     return 0;\r
        int s = (font/MGL_FONT_BOLD)&3;\r
        return (500.f)/fact[s];\r
 }\r
 //-----------------------------------------------------------------------------\r
-float mglFont::Height(const char *how)\r
+float mglFont::Height(const char *how) const\r
 {\r
        if(numg==0)     return 0;\r
        int s=0;\r
@@ -208,7 +208,7 @@ float mglFont::Height(const char *how)
        return (500.f)/fact[s];\r
 }\r
 //-----------------------------------------------------------------------------\r
-long mglFont::Internal(unsigned s)\r
+long mglFont::Internal(unsigned s) const\r
 {\r
        register long i,i1=0,i2=numg-1;\r
        register wchar_t j = wchar_t(s & MGL_FONT_MASK);\r
@@ -236,7 +236,7 @@ int mgl_tex_symb_cmp(const void *a, const void *b)
 }\r
 //-----------------------------------------------------------------------------\r
 // parse LaTeX commands (mostly symbols and acents, and some font-style commands)\r
-unsigned mglFont::Parse(const wchar_t *s)\r
+unsigned mglFont::Parse(const wchar_t *s) const\r
 {\r
        register long k;\r
        unsigned res = unsigned(-2);            // Default is no symbol\r
@@ -286,7 +286,7 @@ unsigned mglFont::Parse(const wchar_t *s)
        return res;\r
 }\r
 //-----------------------------------------------------------------------------\r
-void mglFont::Convert(const wchar_t *str, unsigned *res)\r
+void mglFont::Convert(const wchar_t *str, unsigned *res) const\r
 {\r
        register unsigned r,i,j,k,i0;\r
        wchar_t s[128], ch;             // TeX command and current char\r
@@ -325,7 +325,7 @@ void mglFont::Convert(const wchar_t *str, unsigned *res)
        res[j] = 0;\r
 }\r
 //-----------------------------------------------------------------------------\r
-float mglFont::get_ptr(long &i,unsigned *str, unsigned **b1, unsigned **b2,float &w1,float &w2, float f1, float f2, int st)\r
+float mglFont::get_ptr(long &i,unsigned *str, unsigned **b1, unsigned **b2,float &w1,float &w2, float f1, float f2, int st) const\r
 {\r
        static unsigned s1[2]={0,0}, s2[2]={0,0};\r
        register long k;\r
@@ -358,7 +358,7 @@ float mglFont::get_ptr(long &i,unsigned *str, unsigned **b1, unsigned **b2,float
        return w1>w2 ? w1 : w2;\r
 }\r
 //-----------------------------------------------------------------------------\r
-void mglFont::draw_ouline(int st, float x, float y, float f, float g, float ww, float ccol)\r
+void mglFont::draw_ouline(int st, float x, float y, float f, float g, float ww, float ccol) const\r
 {\r
        if(st&MGL_FONT_OLINE)\r
                gr->Glyph(x,y+499*f/g, ww*g, (st&MGL_FONT_WIRE)?12:8, 0, ccol);\r
@@ -367,7 +367,7 @@ void mglFont::draw_ouline(int st, float x, float y, float f, float g, float ww,
 }\r
 //-----------------------------------------------------------------------------\r
 #define MGL_CLEAR_STYLE {st = style;   yy = y; ff = f; ccol=col;       a = (st/MGL_FONT_BOLD)&3;}\r
-float mglFont::Puts(const unsigned *text, float x,float y,float f,int style,float col)\r
+float mglFont::Puts(const unsigned *text, float x,float y,float f,int style,float col) const\r
 {\r
        if(numg==0)     return 0;\r
        register long j,k;\r
index 851e14b72f6e69a0a126c963a70dc2408c7b75cd..d6c7e9296e221436d2b1acdf2a66a8dbe2dd81b2 100644 (file)
@@ -20,11 +20,11 @@ mglCanvasGL::mglCanvasGL() : mglCanvas(1,1) {}
 //-----------------------------------------------------------------------------\r
 mglCanvasGL::~mglCanvasGL(){}\r
 //-----------------------------------------------------------------------------\r
-void mglCanvasGL::Finish()\r
+void mglCanvasGL::Finish(bool fast)\r
 {\r
        if(Prm.size()>0)\r
        {\r
-               std::sort(Prm.begin(), Prm.end());\r
+               PreparePrim(fast);\r
                glVertexPointer(3, GL_FLOAT, sizeof(mglPnt), &(Pnt[0].x));\r
                glNormalPointer(GL_FLOAT, sizeof(mglPnt), &(Pnt[0].u));\r
                glColorPointer(4, GL_FLOAT, sizeof(mglPnt), &(Pnt[0].r));\r
index 3156d71b0e673c33159c62384ef879d1dd5dda2e..44530bb43fb489ebcd353f636cc73b3f74f73406 100644 (file)
@@ -56,7 +56,7 @@ void mglCanvas::PutDrawReg(mglDrawReg *d, const mglCanvas *gr)
        }\r
 }\r
 //-----------------------------------------------------------------------------\r
-void mglCanvas::PostScale(mglPoint &p)\r
+void mglCanvas::PostScale(mglPoint &p) const\r
 {\r
        mglPoint q=p/(2*B.pf);\r
        p.x = B.x + q.x*B.b[0] + q.y*B.b[1] + q.z*B.b[2];\r
@@ -70,7 +70,7 @@ void mglCanvas::PostScale(mglPoint &p)
        }*/\r
 }\r
 //-----------------------------------------------------------------------------\r
-bool mglCanvas::ScalePoint(mglPoint &p, mglPoint &n, bool use_nan)\r
+bool mglCanvas::ScalePoint(mglPoint &p, mglPoint &n, bool use_nan) const\r
 {\r
        bool res = get(MGL_DISABLE_SCALE) || mglBase::ScalePoint(p,n,use_nan);\r
        if(TernAxis&4)  return res;\r
@@ -167,7 +167,7 @@ void mglCanvas::LightScale()
 }\r
 //-----------------------------------------------------------------------------\r
 // NOTE: Perspective, transformation formulas and lists are not support just now !!! Also it use LAST InPlot parameters!!!\r
-mglPoint mglCanvas::CalcXYZ(int xs, int ys)\r
+mglPoint mglCanvas::CalcXYZ(int xs, int ys) const\r
 {\r
        float s3 = 2*B.pf, x, y, z;     // TODO: Take into account z-value of z-buffer\r
        ys = Height - ys;\r
@@ -191,13 +191,12 @@ mglPoint mglCanvas::CalcXYZ(int xs, int ys)
                x = s3*(B.b[5]*xx-B.b[2]*yy)/d3;\r
                z = s3*(B.b[0]*yy-B.b[3]*xx)/d3;\r
        }\r
-       LastMousePos = mglPoint(Min.x + (Max.x-Min.x)*(x+1)/2,\r
+       return mglPoint(Min.x + (Max.x-Min.x)*(x+1)/2,\r
                                        Min.y + (Max.y-Min.y)*(y+1)/2,\r
                                        Min.z + (Max.z-Min.z)*(z+1)/2);\r
-       return LastMousePos;\r
 }\r
 //-----------------------------------------------------------------------------\r
-void mglCanvas::CalcScr(mglPoint p, int *xs, int *ys)\r
+void mglCanvas::CalcScr(mglPoint p, int *xs, int *ys) const\r
 {\r
        mglPoint n;\r
        ScalePoint(p,n);\r
@@ -205,7 +204,7 @@ void mglCanvas::CalcScr(mglPoint p, int *xs, int *ys)
        if(ys)  *ys=int(p.y);\r
 }\r
 //-----------------------------------------------------------------------------\r
-mglPoint mglCanvas::CalcScr(mglPoint p)\r
+mglPoint mglCanvas::CalcScr(mglPoint p) const\r
 {      int x,y;        CalcScr(p,&x,&y);       return mglPoint(x,y);   }\r
 //-----------------------------------------------------------------------------\r
 //mglCanvas *mgl_tmp_gr;\r
@@ -344,6 +343,14 @@ void mglCanvas::pxl_setz(unsigned long id, unsigned long n, const void *)
        {       mglPrim &q=Prm[i];      q.z = Pnt[q.n1].z;      }\r
 }\r
 //-----------------------------------------------------------------------------\r
+void mglCanvas::PreparePrim(bool fast)\r
+{\r
+       mglStartThread(&mglCanvas::pxl_transform,this,Pnt.size());\r
+       if(fast)        mglStartThread(&mglCanvas::pxl_setz,this,Prm.size());\r
+       else    mglStartThread(&mglCanvas::pxl_setz_adv,this,Prm.size());\r
+       std::sort(Prm.begin(), Prm.end());\r
+}\r
+//-----------------------------------------------------------------------------\r
 void mglCanvas::Finish(bool fast)\r
 {\r
        static mglMatrix bp;\r
@@ -352,10 +359,7 @@ void mglCanvas::Finish(bool fast)
        if(get(MGL_FINISHED))   return; // nothing to do\r
        if(!(Quality&4) && Prm.size()>0)\r
        {\r
-               mglStartThread(&mglCanvas::pxl_transform,this,Pnt.size());\r
-               if(fast)        mglStartThread(&mglCanvas::pxl_setz,this,Prm.size());\r
-               else    mglStartThread(&mglCanvas::pxl_setz_adv,this,Prm.size());\r
-               std::sort(Prm.begin(), Prm.end());      bp=Bp;\r
+               PreparePrim(fast);      bp=Bp;\r
 //             mglStartThread(&mglCanvas::pxl_primdr,this,Prm.size()); // TODO: check conflicts in pthreads\r
                pxl_primdr(-1,Prm.size(),NULL);\r
        }\r
index 099eba0bd3646f6c6e84ca5f304d87a7cdb70806..22c6f3606698e0898a8f99a1554ed207054df61d 100644 (file)
@@ -391,7 +391,7 @@ Sets the palette as selected colors. Default value is @code{"Hbgrcmyhlnqeup"} th
 @cindex SetWarn
 @cindex GetWarn
 
-Normally user should set it to zero by @code{SetWarn(0);} before plotting and check if @var{GetWarn} return non zero after plotting. Only last warning will be saved. All warnings/errors produced by MathGL is not critical -- the plot just will not be drawn.
+Normally user should set it to zero by @code{SetWarn(0);} before plotting and check if @code{GetWarnCode()} or @code{Message()} return non zero after plotting. Only last warning will be saved. All warnings/errors produced by MathGL is not critical -- the plot just will not be drawn.
 
 @deftypefn {Method on @code{mglGraph}} @code{void} SetWarn (@code{int} code, @code{const char *}info=@code{""})
 @deftypefnx {C function} @code{void} mgl_set_warn (@code{HMGL} gr, @code{int} code, @code{const char *}info)
@@ -400,7 +400,7 @@ Set warning code. Normally you should call this function only for clearing the w
 
 @deftypefn {Method on @code{mglGraph}} @code{const char *}Message ()
 @deftypefnx {C function} @code{const char *}mgl_get_mess (@code{HMGL} gr)
-Set buffer for writing messages about matters why some plot are not drawn. Set to NULL to disable messages. The buffer length must be at least 1024. If @var{buf}[0]==0 then there are no messages.
+Return messages about matters why some plot are not drawn. If returned string is empty then there are no messages.
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph}} @code{int} GetWarnCode ()
@@ -541,7 +541,7 @@ Sets center of axis cross section. If one of values is NAN then MathGL try to se
 @deftypefnx {Method on @code{mglGraph}} @code{void} SetFunc (@code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ=@code{""}, @code{const char *}EqA=@code{""})
 @deftypefnx {C function} @code{void} mgl_set_func (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ, @code{const char *}EqA)
 @end ifclear
-Sets transformation formulas for curvilinear coordinate. Each string should contain mathematical expression for real coordinate depending on internal coordinates @samp{x}, @samp{y}, @samp{z} and @samp{a} or @samp{c} for colorbar. For example, the cylindrical coordinates are introduced as @code{Axis("x*cos(y)", "x*sin(y)", "z");}. For removing of formulas the corresponding parameter should be empty or @code{NULL}. Using transformation formulas will slightly slowing the program. Parameter @var{EqA} set the similar transformation formula for color scheme. @xref{Textual formulas}.
+Sets transformation formulas for curvilinear coordinate. Each string should contain mathematical expression for real coordinate depending on internal coordinates @samp{x}, @samp{y}, @samp{z} and @samp{a} or @samp{c} for colorbar. For example, the cylindrical coordinates are introduced as @code{SetFunc("x*cos(y)", "x*sin(y)", "z");}. For removing of formulas the corresponding parameter should be empty or @code{NULL}. Using transformation formulas will slightly slowing the program. Parameter @var{EqA} set the similar transformation formula for color scheme. @xref{Textual formulas}.
 @end deftypefn
 
 @deftypefn {MGL command} {} axis @code{how}
@@ -646,8 +646,10 @@ Set time labels with step @var{val} and template @var{templ} for x-,y-,z-axis ti
 @end deftypefn
 
 @deftypefn {MGL command} {} tuneticks @code{val} [@code{pos=1.15}]
+@ifclear UDAV
 @deftypefnx {Method on @code{mglGraph}} @code{void} SetTuneTicks (@code{int} tune, @code{float} pos=@code{1.15})
 @deftypefnx {C function} @code{void} mgl_tune_ticks (@code{HMGL} gr, @code{int} tune, @code{float} pos)
+@end ifclear
 Switch on/off ticks enhancing by factoring common multiplier (for small, like from 0.001 to 0.002, or large, like from 1000 to 2000, coordinate values -- enabled if @var{tune}&1 is nonzero) or common component (for narrow range, like from 0.999 to 1.000 -- enabled if @var{tune}&2 is nonzero). Also set the position @var{pos} of common multiplier/component on the axis: =0 at minimal axis value, =1 at maximal axis value. Default value is 1.15.
 @end deftypefn
 
@@ -843,6 +845,11 @@ Push transformation matrix into stack. Later you can restore its current state b
 Pop (restore last 'pushed') transformation matrix into stack.
 @end deftypefn
 
+@deftypefn {Method on @code{mglGraph}} @code{void} SetPlotFactor (@code{float} val)
+@deftypefnx {C function} @code{void} mgl_set_plotfactor (@code{HMGL} gr, @code{float} val)
+Sets the factor of plot size. It is not recommended to set it lower then 1.5. This is some analogue of function Zoom() but applied not to overall image but for each InPlot. Use negative value or zero to enable automatic selection.
+@end deftypefn
+
 There are 2 functions @code{View()} and @code{Zoom()} which transform whole image. I.e. they act as secondary transformation matrix. They were introduced for rotating/zooming the whole plot by mouse.
 
 @deftypefn {Method on @code{mglGraph}} @code{void} View (@code{float} TetX, @code{float} TetZ, @code{float} TetY=@code{0})
@@ -924,10 +931,10 @@ Ends group definition.
 @cindex ShowImage
 @end ifclear
 
-These functions export current view to a graphic file. The filename @var{fname} should have appropriate extension. Parameter @var{descr} gives the short description of the picture. Just now the transparency is supported in PNG and SVG files.
+These functions export current view to a graphic file. The filename @var{fname} should have appropriate extension. Parameter @var{descr} gives the short description of the picture. Just now the transparency is supported in PNG, SVG, OBJ and IDTF files.
 
 @anchor{write}
-@deftypefn {MGL command} {} write 'fname'
+@deftypefn {MGL command} {} write ['fname'='']
 @ifclear UDAV
 @deftypefnx {Method on @code{mglGraph}} @code{void} WriteFrame (@code{const char *}fname=@code{""}, @code{const char *}descr=@code{""})
 @deftypefnx {C function} @code{void} mgl_write_frame (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
@@ -996,7 +1003,7 @@ Exports current frame to XYZ/XYZL/XYZF files using vector representation (see @u
 
 @deftypefn {Method on @code{mglGraph}} @code{void} WriteSTL (@code{const char *}fname, @code{const char *}descr=@code{""})
 @deftypefnx {C function} @code{void} mgl_write_stl (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
-Exports current frame to STL file using vector representation (see @url{http://en.wikipedia.org/wiki/STL_(file_format), STL format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name).
+Exports current frame to STL file using vector representation (see @url{http://en.wikipedia.org/wiki/STL_(file_format), STL format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name.
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph}} @code{void} WriteOFF (@code{const char *}fname, @code{const char *}descr=@code{""}, @code{bool} colored=@code{false})
@@ -1006,7 +1013,7 @@ Exports current frame to OFF file using vector representation (see @url{http://p
 
 @c @deftypefn {Method on @code{mglGraph}} @code{void} WriteX3D (@code{const char *}fname, @code{const char *}descr=@code{""})
 @c @deftypefnx {C function} @code{void} mgl_write_x3d (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
-@c Exports current frame to OBJ/MTL file using vector representation (see @url{http://en.wikipedia.org/wiki/X3d, X3D format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name).
+@c Exports current frame to X3D file using vector representation (see @url{http://en.wikipedia.org/wiki/X3d, X3D format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name).
 @c @end deftypefn
 
 
@@ -1026,9 +1033,9 @@ Displays the current picture using external program @var{viewer} for viewing. Th
 Exports points and primitives in file using MGLD format. Later this file can be used for faster loading and viewing by @code{mglview} utility. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name).
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{void} ImportMGLD (@code{const char *}fname, @code{const char *}descr=@code{""})
-@deftypefnx {C function} @code{void} mgl_import_mgld (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
-Imports points and primitives in file using MGLD format. Later this file can be used for faster loading and viewing by @code{mglview} utility. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name).
+@deftypefn {Method on @code{mglGraph}} @code{void} ImportMGLD (@code{const char *}fname, @code{bool} add=@code{false})
+@deftypefnx {C function} @code{void} mgl_import_mgld (@code{HMGL} gr, @code{const char *}fname, @code{int} add)
+Imports points and primitives in file using MGLD format. Later this file can be used for faster loading and viewing by @code{mglview} utility. Parameter @var{fname} specifies the file name, @var{add} sets to append or replace primitives to existed ones.
 @end deftypefn
 
 @end ifclear
@@ -1295,7 +1302,7 @@ Draw the sphere with radius @var{r} and center at point @var{p}=@{@var{x0}, @var
 @deftypefn {MGL command} {} drop @code{x0 y0 dx dy r} ['col'='r' @code{sh=1 asp=1}]
 @deftypefnx {MGL command} {} drop @code{x0 y0 z0 dx dy dz r} ['col'='r' @code{sh=1 asp=1}]
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Drop (@code{mglPoint} p, @code{mglPoint} d, @code{float} r, @code{const char *}stl=@code{"r"}, @code{float} shift=@code{1}, @code{float} ap=@code{1})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Drop (@code{mglPoint} p, @code{mglPoint} d, @code{float} r, @code{const char *}col=@code{"r"}, @code{float} shift=@code{1}, @code{float} ap=@code{1})
 @deftypefnx {C function} @code{void} mgl_drop (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} dx, @code{float} dy, @code{float} dz, @code{float} r, @code{const char *}col, @code{float} shift, @code{float} ap)
 @end ifclear
 Draw the drop with radius @var{r} at point @var{p} elongated in direction @var{d} and with color @var{col}. Parameter @var{shift} set the degree of drop oblongness: @samp{0} is sphere, @samp{1} is maximally oblongness drop. Parameter @var{ap} set relative width of the drop (this is analogue of ``ellipticity'' for the sphere).
@@ -1374,7 +1381,7 @@ colors for filling and boundary (second one if style @samp{@@} is used, black co
 @cindex Label
 @cindex fgets
 
-These functions draw the text. There are functions for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. MathGL can use arbitrary font-faces and parse many TeX commands (for more details see @ref{Font styles}). All these functions have 2 variant: for printing 8-bit text (@code{char *}) and for printing Unicode text (@code{wchar_t *}). In first case the conversion in current locale is used. So sometimes you need to specify it by @code{setlocale()} function. The size argument control the size of text: if positive it give the value, if negative it give the value relative to @var{FontSize}. The font type (STIX, arial, courier, times and so on) can be selected by function LoadFont(). @xref{Font settings}.
+These functions draw the text. There are functions for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. MathGL can use arbitrary font-faces and parse many TeX commands (for more details see @ref{Font styles}). All these functions have 2 variant: for printing 8-bit text (@code{char *}) and for printing Unicode text (@code{wchar_t *}). In first case the conversion into the current locale is used. So sometimes you need to specify it by @code{setlocale()} function. The size argument control the size of text: if positive it give the value, if negative it give the value relative to @var{SetFontSize()}. The font type (STIX, arial, courier, times and so on) can be selected by function LoadFont(). @xref{Font settings}.
 
 The font parameters are described by string. This string may set the text color @samp{wkrgbcymhRGBCYMHW} (see @ref{Color styles}). Also,  after delimiter symbol @samp{:}, it can contain characters of font type (@samp{rbiwou}) and/or align (@samp{LRC}) specification. The font types are: @samp{r} -- roman (or regular) font, @samp{i} -- italic style, @samp{b} -- bold style, @samp{w} -- wired style, @samp{o} -- over-lined text, @samp{u} -- underlined text. By default roman font is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. For example, string @samp{b:iC} correspond to italic font style for centered text which printed by blue color.
 
@@ -1413,16 +1420,6 @@ The function plots the string @var{text} at position @var{p} along direction @va
 Draws unrotated @var{n}-th line of file @var{fname} at position @{@var{x},@var{y},@var{z}@} with specified @var{size}. By default parameters from @ref{font} command are used.
 @end deftypefn
 
-@deftypefn {MGL command} {} label @code{x y} 'text' ['fnt'='']
-@ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{float} x, @code{float} y, @code{const char *}text, @code{const char *}fnt=@code{""})
-@deftypefnx {Method on @code{mglGraph}} @code{void} Labelw (@code{float} x, @code{float} y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""})
-@deftypefnx {C function} @code{void} mgl_label_pos (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const char *}text, @code{const char *}fnt)
-@deftypefnx {C function} @code{void} mgl_labelw_pos (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const wchar_t *}text, @code{const char *}fnt)
-@end ifclear
-The function draws the string @var{text} at position @{@var{x}, @var{y}@} with fonts specifying by @var{fnt}. Coordinates @code{x, y} are supposed to be in range [0,1].
-@end deftypefn
-
 
 @deftypefn {MGL command} {} text ydat 'text' ['fnt'='']
 @deftypefnx {MGL command} {} text xdat ydat 'text' ['fnt'='']
@@ -1584,7 +1581,7 @@ colors for background (first one) and border (second one) of legend. Note, that
 @deftypefnx {Method on @code{mglGraph}} @code{void} Legend (@code{int} pos=@code{0x3}, @code{const char *}fnt=@code{"#"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1})
 @deftypefnx {C function} @code{void} mgl_legend (@code{HMGL} gr, @code{int} pos, @code{const char *}fnt, @code{float} size, @code{float} llen)
 @end ifclear
-Draws legend of accumulated legend entries by font @var{fnt} with @var{size}. Parameter @var{pos} sets the position of the legend: @samp{0} is bottom left corner, @samp{1} is bottom right corner, @samp{2} is top left corner, @samp{3} is top right corner (is default). Paramater font can contain colors for face (1st one), for border (2nd one) and for text (last one). If less than 3 colors are specified then the color for border is black (for 2 and less colors), and the color for face is white (for 1 or none colors). If string @var{fnt} contain @samp{#} then border around the legend is drawn.
+Draws legend of accumulated legend entries by font @var{fnt} with @var{size}. Parameter @var{pos} sets the position of the legend: @samp{0} is bottom left corner, @samp{1} is bottom right corner, @samp{2} is top left corner, @samp{3} is top right corner (is default). Parameter @var{fnt} can contain colors for face (1st one), for border (2nd one) and for text (last one). If less than 3 colors are specified then the color for border is black (for 2 and less colors), and the color for face is white (for 1 or none colors). If string @var{fnt} contain @samp{#} then border around the legend is drawn.
 @end deftypefn
 
 @deftypefn {MGL command} {} legend @code{x y} ['fnt'='#' @code{size=-1 llen=0.1}]
@@ -1673,7 +1670,7 @@ These functions draw continuous lines between points @{@var{x}[i], @var{y}[i], @
 @deftypefnx {Method on @code{mglGraph}} @code{void} Radar (@code{const mglData &}a, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
 @deftypefnx {C function} @code{void} mgl_radar (@code{HMGL} gr, @code{HCDT} a, @code{const char *}pen, @code{const char *}opt)
 @end ifclear
-This functions draws radar chart which is continuous lines between points located on an radial lines (like plot in Polar coordinates). Parameter @var{value} in options @var{opt} set the additional shift of data (i.e. the data @var{a}+@var{value} is used instead of @var{a}). If @code{value<0} then @code{r=max(0, -min(value)}. If @var{pen} containt @samp{#} symbol then "grid" (radial lines and circle for @var{r}) is drawn See also @ref{plot}. @sref{Radar sample}
+This functions draws radar chart which is continuous lines between points located on an radial lines (like plot in Polar coordinates). Parameter @var{value} in options @var{opt} set the additional shift of data (i.e. the data @var{a}+@var{value} is used instead of @var{a}). If @code{value<0} then @code{r=max(0, -min(value)}. If @var{pen} containt @samp{#} symbol then "grid" (radial lines and circle for @var{r}) is drawn. See also @ref{plot}. @sref{Radar sample}
 @end deftypefn
 
 @anchor{step}
@@ -1703,7 +1700,7 @@ These functions draw continuous stairs for points to axis plane. See also @ref{p
 @deftypefnx {C function} @code{void} mgl_tens_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt)
 @deftypefnx {C function} @code{void} mgl_tens_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt)
 @end ifclear
-These functions draw continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} with color defined by the special array @var{c}[i] (look like tension plot). String @var{pen} specifies the color scheme (see @ref{Color scheme}) and style and/or width of line (see @ref{Line styles}). By default (@code{pen=""}) solid line with current color scheme is used. See also @ref{plot}, @ref{mesh}, @ref{fall}. @sref{Tens sample}
+These functions draw continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} with color defined by the special array @var{c}[i] (look like tension plot). String @var{pen} specifies the color scheme (see @ref{Color scheme}) and style and/or width of line (see @ref{Line styles}). See also @ref{plot}, @ref{mesh}, @ref{fall}. @sref{Tens sample}
 @end deftypefn
 
 @anchor{tape}
@@ -1775,7 +1772,7 @@ These functions draw vertical lines from points to axis plane. See also @ref{are
 @deftypefnx {C function} @code{void} mgl_bars_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
 @deftypefnx {C function} @code{void} mgl_bars_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt)
 @end ifclear
-These functions draw vertical bars from points to axis plane. If string contain symbol @samp{a} then lines are drawn one above another (like summation). If string contain symbol @samp{f} then waterfall chart is drawn for determining the cumulative effect of sequentially introduced positive or negative values. You can give different colors for positive and negative values if number of specified colors is equal to 2*number of curves. See also @ref{barh}, @ref{cones}, @ref{area}, @ref{stem}, @ref{chart}, @ref{barwidth}. @sref{Bars sample}
+These functions draw vertical bars from points to axis plane. If string @var{pen} contain symbol @samp{a} then lines are drawn one above another (like summation). If string contain symbol @samp{f} then waterfall chart is drawn for determining the cumulative effect of sequentially introduced positive or negative values. You can give different colors for positive and negative values if number of specified colors is equal to 2*number of curves. See also @ref{barh}, @ref{cones}, @ref{area}, @ref{stem}, @ref{chart}, @ref{barwidth}. @sref{Bars sample}
 @end deftypefn
 
 @anchor{barh}
@@ -2073,7 +2070,7 @@ The function draws density plot for surface specified parametrically @{@var{x}[i
 @deftypefnx {C function} @code{void} mgl_cont__val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
 @deftypefnx {C function} @code{void} mgl_cont_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
 @end ifclear
-The function draws contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k] or at @var{z} = @var{Min}.z if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. If string @var{sch} have symbol @samp{#} then grid lines are drawn. If string @var{sch} have symbol @samp{t} or @samp{T} then contour labels @var{v}[k] will be drawn below (or above) the contours. See also @ref{dens}, @ref{contf}, @ref{contd}, @ref{axial}, @code{cont[xyz]}. @sref{Cont sample}
+The function draws contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k] or at @var{z} = @var{Min}.z if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. If string @var{sch} have symbol @samp{t} or @samp{T} then contour labels @var{v}[k] will be drawn below (or above) the contours. See also @ref{dens}, @ref{contf}, @ref{contd}, @ref{axial}, @code{cont[xyz]}. @sref{Cont sample}
 @end deftypefn
 
 @deftypefn {MGL command} {} cont zdat ['sch'='']
@@ -2096,7 +2093,7 @@ The same as previous with vector @var{v} of @var{num}-th elements equidistantly
 @deftypefnx {C function} @code{void} mgl_contf_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
 @deftypefnx {C function} @code{void} mgl_contf_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
 @end ifclear
-The function draws solid (or filled) contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k] or at @var{z} = @var{Min}.z if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v} (must be @code{v.nx>2}). If string @var{sch} have symbol @samp{#} then grid lines are drawn. See also @ref{dens}, @ref{cont}, @ref{contd}, @code{contf[xyz]}. @sref{ContF sample}
+The function draws solid (or filled) contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k] or at @var{z} = @var{Min}.z if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v} (must be @code{v.nx>2}). See also @ref{dens}, @ref{cont}, @ref{contd}, @code{contf[xyz]}. @sref{ContF sample}
 @end deftypefn
 
 @deftypefn {MGL command} {} contf zdat ['sch'='']
@@ -2142,7 +2139,7 @@ The same as previous with vector @var{v} of @var{num}-th elements equidistantly
 @deftypefnx {C function} @code{void} mgl_contv_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
 @deftypefnx {C function} @code{void} mgl_contv_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
 @end ifclear
-The function draws vertical cylinder at contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k] or at @var{z} = @var{Min}.z if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. If string @var{sch} have symbol @samp{#} then grid lines are drawn. If string @var{sch} have symbol @samp{t} or @samp{T} then contour labels @var{v}[k] will be drawn below (or above) the contours. See also @ref{cont}, @ref{contf}. @sref{ContV sample}
+The function draws vertical cylinder at contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k] or at @var{z} = @var{Min}.z if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. See also @ref{cont}, @ref{contf}. @sref{ContV sample}
 @end deftypefn
 
 @deftypefn {MGL command} {} contv zdat ['sch'='']
@@ -2188,7 +2185,7 @@ The same as previous with vector @var{v} of @var{num}-th elements equidistantly
 @deftypefnx {C function} @code{void} mgl_grid (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
 @deftypefnx {C function} @code{void} mgl_grid_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
 @end ifclear
-The function draws grid lines for density plot of surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal}. String @var{sch} sets the color scheme. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Grid is plotted for each z slice of the data. See also @ref{dens}, @ref{cont}, @ref{contf}, @ref{meshnum}.
+The function draws grid lines for density plot of surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{Min}.z. See also @ref{dens}, @ref{cont}, @ref{contf}, @ref{meshnum}.
 @end deftypefn
 
 
index b3ff1a5135cff20c17f21aaa4e4fd36d8177470f..ea75cb6a6deb380cfcdf62dc505ef5c893d142b8 100644 (file)
@@ -2,17 +2,21 @@
 @chapter Π―Π΄Ρ€ΠΎ MathGL
 @cindex mglGraph
 
+@ifset UDAV
+Π­Ρ‚Π° Π³Π»Π°Π²Π° ΠΏΠΎΡΠ²ΡΡ‰Π΅Π½Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΡŽ ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠΎΡΡ‚роСния Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² Π΄Π»Ρ 1D, 2D ΠΈ 3D ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Π‘юда Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π°ΡΡ‚Ρ€ΠΎΠΉΠΊΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°, Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Скста ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈ Π΄Ρ€. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ†Π²Π΅Ρ‚Π΅, ΡˆΡ€ΠΈΡ„Ρ‚Π°Ρ…, ΡΡ‚илях Π»ΠΈΠ½ΠΈΠΉ ΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² @ref{General concepts}.
+@end ifset
+
 @ifclear UDAV
-ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ MathGL ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΊΠ»Π°ΡΡ @strong{mglGraph}, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² @code{#include <mgl/mgl.h>}. ΠžΠ½ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΡΡ‚роСния Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² ΠΎΡ‚ 1D, 2D ΠΈ 3D ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². ΠžΠ½ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Скста ΠΈ ΠΏΠΎΡΡ‚роСния ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π•ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡΡ‚роСния Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΊΠΎΡ‚орая  Π·Π°Π΄Π°Π΅Ρ‚ся ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌΠΈ. Π’сС Π³Ρ€Π°Ρ„ичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠ»Π°ΡΡ mglData (@pxref{Data processing}) Π΄Π»Ρ Ρ…ранСния ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΈΠ½Ρ„ормация ΠΎ Ρ†Π²Π΅Ρ‚Π°Ρ…, ΡˆΡ€ΠΈΡ„Ρ‚Π°Ρ…, Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ Ρ„ΠΎΡ€ΠΌΡƒΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π° Π² @ref{Other classes}.
+ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ MathGL ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΊΠ»Π°ΡΡ @strong{mglGraph}, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ Π² @code{#include <mgl/mgl.h>}. ΠžΠ½ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΡΡ‚роСния Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² ΠΎΡ‚ 1D, 2D ΠΈ 3D ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². ΠžΠ½ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Скста ΠΈ ΠΏΠΎΡΡ‚роСния ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π•ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡΡ‚роСния Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΊΠΎΡ‚орая  Π·Π°Π΄Π°Π΅Ρ‚ся ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌΠΈ. Π’сС Π³Ρ€Π°Ρ„ичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠ»Π°ΡΡ mglData (см. @ref{Data processing}) Π΄Π»Ρ Ρ…ранСния ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΈΠ½Ρ„ормация ΠΎ Ρ†Π²Π΅Ρ‚Π°Ρ…, ΡˆΡ€ΠΈΡ„Ρ‚Π°Ρ…, Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ Ρ„ΠΎΡ€ΠΌΡƒΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π° Π² @ref{General concepts} ΠΈ @ref{Other classes}.
 @end ifclear
 
 @menu
 * Constructor::
 * Graphics setup::
 * Axis settings::
-* Transformation matrix::
+* Subplots and rotation::
 * Export picture::
-* Primitives drawing::
+* Primitives::
 * Text printing::
 * Axis and Colorbar::
 * Legend::
@@ -23,7 +27,7 @@
 * Vector fields::
 * Other plotting::
 * Nonlinear fitting::
-* Data distributions::
+* Data manipulation::
 * IDTF functions::
 @end menu
 
 @deftypefn {Constructor on @code{mglGraph}} {} mglGraph (@code{int} kind=@code{0}, @code{int} width=@code{600}, @code{int} height=@code{400})
 @deftypefnx {Constructor on @code{mglGraph}} {} mglGraph (@code{const mglGraph &}gr)
 @deftypefnx {Constructor on @code{mglGraph}} {} mglGraph (@code{HMGL} gr)
-@deftypefnx {C function} @code{HMGL} mgl_create_graph (@code{int} width, @code{int} height)
-@deftypefnx {C function} @code{HMGL} mgl_create_graph_gl ()
-Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ (ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ) ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ€ ΠΊΠ»Π°ΡΡΠ°, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ‚ @code{mglBase} (Ρ‚ΠΈΠΏ @code{HMGL}) Ρ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ @var{width} ΠΈ @var{height}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{type} ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ: @samp{0} -- ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, @samp{1} -- ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² OpenGL.
+@deftypefnx {Ѐункция Π‘} @code{HMGL} mgl_create_graph (@code{int} width, @code{int} height)
+@deftypefnx {Ѐункция Π‘} @code{HMGL} mgl_create_graph_gl ()
+Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ (ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ) ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ€ ΠΊΠ»Π°ΡΡΠ°, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ‚ @code{mglBase} (Ρ‚ΠΈΠΏ @code{HMGL}) Ρ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ @var{width} ΠΈ @var{height}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{kind} ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ: @samp{0} -- ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, @samp{1} -- ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² OpenGL.
 @end deftypefn
 
 @deftypefnx {Destructor on @code{mglGraph}} {} ~mglGraph ()
-@deftypefnx {C function} @code{HMGL} mgl_delete_graph (@code{HMGL} gr)
+@deftypefnx {Ѐункция Π‘} @code{HMGL} mgl_delete_graph (@code{HMGL} gr)
 Π£Π΄Π°Π»ΡΠ΅Ρ‚ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ€ ΠΊΠ»Π°ΡΡΠ° mglGraph.
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{HMGL} Self ()
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{HMGL} Self ()
 Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° @code{HMGL}.
 @end deftypefn
 @end ifclear
@@ -67,8 +71,9 @@ MGL Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ
 Π£ΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ Π²ΡΠ΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΉΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{void} SetPlotId (@code{const char *}id)
-Π—Π°Π΄Π°Π΅Ρ‚ ΠΈΠΌΡ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π΄Π»Ρ ΡΠΎΡ…ранСния Π² Ρ„Π°ΠΉΠ» (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΎΠΊΠ½Π΅ GLUT).
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetPlotId (@code{const char *}id)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_plotid (@code{HMGL} gr, @code{const char *}id)
+Π—Π°Π΄Π°Π΅Ρ‚ ΠΈΠΌΡ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π΄Π»Ρ ΡΠΎΡ…ранСния Π² Ρ„Π°ΠΉΠ» (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΎΠΊΠ½Π΅ FLTK).
 @end deftypefn
 @end ifclear
 
@@ -94,13 +99,13 @@ MGL Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ
 @cindex AlphaDef
 @cindex TranspType
 
-Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΈΠΏ ΠΈ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠ²Π΅Ρ€Ρ…ностСй. Π“Π»Π°Π²Π½ΠΎΠΉ ΡΠ²Π»ΡΠ΅Ρ‚ся Ρ„ункция @code{Alpha()}, ΠΊΠΎΡ‚орая Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π»Ρ Π²ΡΠ΅Ρ… Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ², ΡΠΎΠ·Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅ Π²Ρ‹Π·ΠΎΠ²Π° @code{Alpha()} (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ mglGraphGL). Π€ΡƒΠ½ΠΊΡ†ΠΈΡ @code{SetAlphaDef} ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ alpha-ΠΊΠ°Π½Π°Π»Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠŸΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄Π»Ρ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ @code{SetTransparent}. ΠΠ°ΠΊΠΎΠ½Π΅Ρ†, Ρ„ункция @code{SetTranspType} Π·Π°Π΄Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΠΈ. @sref{Transparent surface sample}
+Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΈΠΏ ΠΈ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠ²Π΅Ρ€Ρ…ностСй. Π“Π»Π°Π²Π½ΠΎΠΉ ΡΠ²Π»ΡΠ΅Ρ‚ся Ρ„ункция @code{Alpha()}, ΠΊΠΎΡ‚орая Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π»Ρ Π²ΡΠ΅Ρ… Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ², ΡΠΎΠ·Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅ Π²Ρ‹Π·ΠΎΠ²Π° @code{Alpha()} (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ mglGraphGL). Π€ΡƒΠ½ΠΊΡ†ΠΈΡ @code{SetAlphaDef} ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ alpha-ΠΊΠ°Π½Π°Π»Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠŸΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄Π»Ρ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ @code{SetTransparent}. ΠΠ°ΠΊΠΎΠ½Π΅Ρ†, Ρ„ункция @code{SetTranspType} Π·Π°Π΄Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΠΈ. @sref{Transparency and lighting}
 
 @anchor{alpha}
 @deftypefn {MGL command} {} alpha @code{[val=on]}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Alpha (@code{bool} enable)
-@deftypefnx {C function} @code{void} mgl_set_alpha (@code{HMGL} gr, @code{int} enable)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Alpha (@code{bool} enable)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_alpha (@code{HMGL} gr, @code{int} enable)
 @end ifclear
 Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠ²ΠΎΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ ΡΠΎΡΡ‚ояниС. ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π°. Π€ΡƒΠ½ΠΊΡ†ΠΈΡ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π»Ρ @emph{всСго} Ρ€ΠΈΡΡƒΠ½ΠΊΠ°.
 @end deftypefn
@@ -108,8 +113,8 @@ MGL Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ
 @anchor{alphadef}
 @deftypefn {MGL command} {} alphadef @code{val}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetAlphaDef (@code{float} val)
-@deftypefnx {C function} @code{void} mgl_set_alpha_default (@code{HMGL} gr, @code{float} alpha)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetAlphaDef (@code{float} val)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_alpha_default (@code{HMGL} gr, @code{float} alpha)
 @end ifclear
 Π—Π°Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄Π»Ρ Π²ΡΠ΅Ρ… Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ². Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0.5.
 @end deftypefn
@@ -117,10 +122,10 @@ MGL Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ
 @anchor{transptype}
 @deftypefn {MGL command} {} transptype @code{val}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetTranspType (@code{int} type)
-@deftypefnx {C function} @code{void} mgl_set_transp_type (@code{HMGL} gr, @code{int} enable)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetTranspType (@code{int} type)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_transp_type (@code{HMGL} gr, @code{int} type)
 @end ifclear
-Π—Π°Π΄Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΠΈ. ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ (@samp{0}) -- "Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅" ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²ΠΈΠ΄Π½Ρ‹ ΠΌΠ΅Π½ΡŒΡˆΠ΅ Ρ‡Π΅ΠΌ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅. Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚обраТаСтся Π² OpenGL (mglGraphGL) Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ся ΠΏΠΎΠ²Π΅Ρ€Ρ…ностСй. "БтСклянная" ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ (@samp{1}) -- Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ ΠΎΡΠ»Π°Π±Π»ΡΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΡΠ²Π΅Ρ‚Π° (ΠΏΠΎ RGB ΠΊΠ°Π½Π°Π»Π°ΠΌ). "Ламповая" ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ (@samp{2}) -- Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ся ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠ°ΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅Ρ‰Π΅Π½ΠΈΡ (Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ @code{SetAlphaDef(0.3)} ΠΈΠ»ΠΈ ΠΌΠ΅Π½ΡŒΡˆΠ΅ Π² ΡΡ‚ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Π΅). @xref{Normal transparency}, @ref{Glass-like transparency}, @ref{Lamp-like transparency}.
+Π—Π°Π΄Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΠΈ. ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ (@samp{0}) -- "Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅" ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²ΠΈΠ΄Π½Ρ‹ ΠΌΠ΅Π½ΡŒΡˆΠ΅ Ρ‡Π΅ΠΌ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅. Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚обраТаСтся Π² OpenGL (mglGraphGL) Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ся ΠΏΠΎΠ²Π΅Ρ€Ρ…ностСй. "БтСклянная" ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ (@samp{1}) -- Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ ΠΎΡΠ»Π°Π±Π»ΡΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΡΠ²Π΅Ρ‚Π° (ΠΏΠΎ RGB ΠΊΠ°Π½Π°Π»Π°ΠΌ). "Ламповая" ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ (@samp{2}) -- Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ся ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠ°ΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅Ρ‰Π΅Π½ΠΈΡ (Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ @code{SetAlphaDef(0.3)} ΠΈΠ»ΠΈ ΠΌΠ΅Π½ΡŒΡˆΠ΅ Π² ΡΡ‚ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Π΅). @sref{Types of transparency}
 @end deftypefn
 
 @c ==================================================================
@@ -138,28 +143,39 @@ MGL Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ
 @anchor{light}
 @deftypefn {MGL command} {} light @code{[val=on]}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{bool} Light (@code{bool} enable)
-@deftypefnx {C function} @code{void} mgl_set_light (@code{HMGL} gr, @code{int} enable)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{bool} Light (@code{bool} enable)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_light (@code{HMGL} gr, @code{int} enable)
 @end ifclear
 Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΡΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ ΡΠΎΡΡ‚ояниС. ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΡΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ.
 @end deftypefn
 
 @deftypefn {MGL command} {} light @code{num} @code{val}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Light (@code{int} n, @code{bool} enable)
-@deftypefnx {C function} @code{void} mgl_set_light_n (@code{HMGL} gr, @code{int} n, @code{int} enable)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Light (@code{int} n, @code{bool} enable)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_light_n (@code{HMGL} gr, @code{int} n, @code{int} enable)
 @end ifclear
 Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ @var{n}-Ρ‹ΠΉ ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΡΠ²Π΅Ρ‚Π°.
 @end deftypefn
 
-@deftypefn {MGL command} {} light @code{num xpos ypos zpos} ['col'='w' @code{br=0.5}]
+@deftypefn {MGL command} {} light @code{num xdir ydir zdir} ['col'='w' @code{br=0.5}]
+@deftypefnx {MGL command} {} light @code{num xdir ydir zdir xpos ypos zpos} ['col'='w' @code{br=0.5}]
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} AddLight (@code{int} n, @code{mglPoint} p, @code{char} c=@code{'w'}, @code{float} bright=@code{0.5}, @code{bool} infty=@code{true}, @code{float} ap=@code{0})
-@deftypefnx {C function} @code{void} mgl_add_light (@code{HMGL} gr, @code{int} n, @code{float} x, @code{float} y, @code{float} z, @code{char} c)
-@deftypefnx {C function} @code{void} mgl_add_light_ext (@code{HMGL} gr, @code{int} n, @code{float} x, @code{float} y, @code{float} z, @code{char} c, @code{float} bright, @code{int} infty, @code{float} ap)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} AddLight (@code{int} n, @code{mglPoint} d, @code{char} c=@code{'w'}, @code{float} bright=@code{0.5}, @code{float} ap=@code{0})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} AddLight (@code{int} n, @code{mglPoint} r, @code{mglPoint} d, @code{char} c=@code{'w'}, @code{float} bright=@code{0.5}, @code{float} ap=@code{0})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_add_light (@code{HMGL} gr, @code{int} n, @code{float} dx, @code{float} dy, @code{float} dz)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_add_light_ext (@code{HMGL} gr, @code{int} n, @code{float} dx, @code{float} dy, @code{float} dz, @code{char} c, @code{float} bright, @code{float} ap)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_add_light_loc (@code{HMGL} gr, @code{int} n, @code{float} rx, @code{float} ry, @code{float} rz, @code{float} dx, @code{float} dy, @code{float} dz, @code{char} c, @code{float} bright, @code{float} ap)
 @end ifclear
-ДобавляСт ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΡΠ²Π΅Ρ‚Π° Ρ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ @var{n} Π² ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ @var{p} Ρ Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{c} ΠΈ ΡΡ€ΠΊΠΎΡΡ‚ΡŒΡŽ @var{bright}, ΠΊΠΎΡ‚орая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [0,1]. Π€Π»Π°Π³ @var{infty}=@code{true} Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ (для Π±ΠΎΠ»Π΅Π΅ Π±Ρ‹ΡΡ‚Ρ€ΠΎΠ³ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ).
+ДобавляСт ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΡΠ²Π΅Ρ‚Π° Ρ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ @var{n} Π² ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ @var{p} Ρ Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{c} ΠΈ ΡΡ€ΠΊΠΎΡΡ‚ΡŒΡŽ @var{bright}, ΠΊΠΎΡ‚орая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [0,1]. Π•сли ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠ° @var{r} ΠΈ ΠΎΠ½ΠΎ Π½Π΅ NAN, Ρ‚ΠΎ ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΡΡ‡ΠΈΡ‚аСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ, ΠΈΠ½Π°Ρ‡Π΅ ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ся Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌ (для Π±ΠΎΠ»Π΅Π΅ Π±Ρ‹ΡΡ‚Ρ€ΠΎΠ³ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ).
+@end deftypefn
+
+@anchor{diffuse}
+@ifclear UDAV
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetDifLight (@code{bool} enable)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_light_dif (@code{HMGL} gr, @code{int} enable)
+Π—Π°Π΄Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΈΡ„Ρ„ΡƒΠ·Π½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅Ρ‰Π΅Π½ΠΈΡ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΎΠ² ΡΠ²Π΅Ρ‚Π°).
 @end deftypefn
+@end ifclear
 
 @anchor{ambient}
 @deftypefn {MGL command} {} ambient @code{val}
@@ -178,10 +194,10 @@ MGL Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ
 @anchor{fog}
 @deftypefn {MGL command} {} fog @code{val [dz=0.25]}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Fog (@code{float} d, @code{float} dz=@code{0.25})
-@deftypefnx {C function} @code{void} mgl_set_fog (@code{HMGL} gr, @code{float} d, @code{float} dz)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Fog (@code{float} d, @code{float} dz=@code{0.25})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_fog (@code{HMGL} gr, @code{float} d, @code{float} dz)
 @end ifclear
-Π˜ΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΡƒΠΌΠ°Π½ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅. Π’ΡƒΠΌΠ°Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ся Π½Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π°ΡΡΡ‚оянии @var{dz} ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΠ±Π·ΠΎΡ€Π° ΠΈ Π΅Π³ΠΎ ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΡ‚Π΅Ρ‚ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π²Π³Π»ΡƒΠ±ΡŒ ΠΏΠΎ Π·Π°ΠΊΠΎΠ½Ρƒ ~@math{1-exp(-d*z)}. Π—Π΄Π΅ΡΡŒ @emph{z} -- Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π½Π° 1 Π³Π»ΡƒΠ±ΠΈΠ½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π•сли @var{d}=@code{0} Ρ‚ΠΎ Ρ‚ΡƒΠΌΠ°Π½ ΠΎΡ‚сутствуСт. @sref{Surface in fog sample}
+Π˜ΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΡƒΠΌΠ°Π½ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅. Π’ΡƒΠΌΠ°Π½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ся Π½Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π°ΡΡΡ‚оянии @var{dz} ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΠ±Π·ΠΎΡ€Π° ΠΈ Π΅Π³ΠΎ ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΡ‚Π΅Ρ‚ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π²Π³Π»ΡƒΠ±ΡŒ ΠΏΠΎ Π·Π°ΠΊΠΎΠ½Ρƒ ~@math{1-exp(-d*z)}. Π—Π΄Π΅ΡΡŒ @emph{z} -- Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π½Π° 1 Π³Π»ΡƒΠ±ΠΈΠ½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π•сли @var{d}=@code{0} Ρ‚ΠΎ Ρ‚ΡƒΠΌΠ°Π½ ΠΎΡ‚сутствуСт. @sref{Adding fog}
 @end deftypefn
 
 @c ==================================================================
@@ -204,17 +220,17 @@ MGL Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ
 @anchor{barwidth}
 @deftypefn {MGL command} {} barwidth @code{val}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetBarWidth ( @code{float} val)
-@deftypefnx {C function} @code{void} mgl_set_bar_width (@code{HMGL} gr, @code{float} val)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetBarWidth ( @code{float} val)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_bar_width (@code{HMGL} gr, @code{float} val)
 @end ifclear
-Π—Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² Π² Bars, Barh, BoxPlot (@pxref{Bars}). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ @code{0.7}.
+Π—Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² Π² Bars, Barh, BoxPlot (см. @ref{Bars}). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ @code{0.7}.
 @end deftypefn
 
 @anchor{marksize}
 @deftypefn {MGL command} {} marksize @code{val}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetMarkSize (@code{float} val)
-@deftypefnx {C function} @code{void} mgl_set_mark_size (@code{HMGL} gr, @code{float} val)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetMarkSize (@code{float} val)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_mark_size (@code{HMGL} gr, @code{float} val)
 @end ifclear
 Π—Π°Π΄Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² Π΄Π»Ρ @ref{1D plotting}. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ @code{0.02}.
 @end deftypefn
@@ -222,18 +238,18 @@ MGL Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ
 @anchor{arrowsize}
 @deftypefn {MGL command} {} arrowsize @code{val}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetArrowSize (@code{float} val)
-@deftypefnx {C function} @code{void} mgl_set_arrow_size (@code{HMGL} gr, @code{float} val)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetArrowSize (@code{float} val)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_arrow_size (@code{HMGL} gr, @code{float} val)
 @end ifclear
-Π—Π°Π΄Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡΡ‚Ρ€Π΅Π»ΠΎΠΊ Π΄Π»Ρ @ref{1D plotting}, Π»ΠΈΠ½ΠΈΠΉ ΠΈ ΠΊΡ€ΠΈΠ²Ρ‹Ρ… (@pxref{Primitives drawing}). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ @code{0.03}.
+Π—Π°Π΄Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡΡ‚Ρ€Π΅Π»ΠΎΠΊ Π΄Π»Ρ @ref{1D plotting}, Π»ΠΈΠ½ΠΈΠΉ ΠΈ ΠΊΡ€ΠΈΠ²Ρ‹Ρ… (см. @ref{Primitives drawing}). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ @code{0.03}.
 @end deftypefn
 
 @anchor{meshnum}
 @anchor{MeshNum}
 @deftypefn {MGL command} {} meshnum @code{val}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetMeshNum (@code{int} val)
-@deftypefnx {C function} @code{void} mgl_set_meshnum (@code{HMGL} gr, @code{int} num)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetMeshNum (@code{int} val)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_meshnum (@code{HMGL} gr, @code{int} num)
 @end ifclear
 Π—Π°Π΄Π°Π΅Ρ‚ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ΅ Ρ‡ΠΈΡΠ»ΠΎ Π»ΠΈΠ½ΠΈΠΉ Π² Mesh(), Fall(), Grid() ΠΈ Ρ‡ΠΈΡΠ»ΠΎ ΡΡ‚Ρ€Π΅Π»ΠΎΠΊ (ΡˆΡ‚Ρ€ΠΈΡ…ΠΎΠ²) Π² Vect(), Dew() ΠΈ Ρ‡ΠΈΡΠ»ΠΎ ΡΡ‡Π΅Π΅ΠΊ Π² Cloud*(). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (=0) Ρ€ΠΈΡΡƒΡŽΡ‚ся Π²ΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ, ΡΡ‚Ρ€Π΅Π»ΠΊΠΈ, ΡΡ‡Π΅ΠΉΠΊΠΈ.
 @end deftypefn
@@ -248,34 +264,29 @@ MGL Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ
 @end ifclear
 @cindex Cut
 
-Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π΄Π°ΡŽΡ‚ ΡƒΡΠ»ΠΎΠ²ΠΈΡ ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Π° (Π²Ρ‹Ρ€Π΅Π·Π°Π½Π°) ΠΈΠ· Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π—Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Π²ΡΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ ΡΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ(-ями) NAN ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈΠ»ΠΈ Π°ΠΌΠΏΠ»ΠΈΡ‚ΡƒΠ΄Π΅ Π°Π²Ρ‚оматичСски ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ся ΠΈΠ· Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
+Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π΄Π°ΡŽΡ‚ ΡƒΡΠ»ΠΎΠ²ΠΈΡ ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Π° (Π²Ρ‹Ρ€Π΅Π·Π°Π½Π°) ΠΈΠ· Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π—Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Π²ΡΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ ΡΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ(-ями) NAN ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈΠ»ΠΈ Π°ΠΌΠΏΠ»ΠΈΡ‚ΡƒΠ΄Π΅ Π°Π²Ρ‚оматичСски ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ся ΠΈΠ· Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. @sref{Cutting sample}
 
 @anchor{cut}
 @deftypefn {MGL command} {} cut @code{val}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetCut (@code{bool} val)
-@deftypefnx {C function} @code{void} mgl_set_cut (@code{HMGL} gr, @code{int} val)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetCut (@code{bool} val)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_cut (@code{HMGL} gr, @code{int} val)
 @end ifclear
 Π—Π°Π΄Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π΅Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡Π΅ΠΊ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π•сли @code{true} Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ся ΠΈΠ· Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (это ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΡƒΡŽΡ‚ся Π½Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ.
 @end deftypefn
 
-@float
-@image{cut, 7cm}
-@caption{Π›Π΅Π²Ρ‹ΠΉ Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Π½ ΠΏΡ€ΠΈ @code{Cut=false}, ΠΏΡ€Π°Π²Ρ‹ΠΉ ΠΏΡ€ΠΈ @code{Cut=true}.}
-@end float
-
 @deftypefn {MGL command} {} cut @code{x1 y1 z1 x2 y2 z2}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetCutBox (@code{mglPoint} p1, @code{mglPoint} p1)
-@deftypefnx {C function} @code{void} mgl_set_cut_box (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetCutBox (@code{mglPoint} p1, @code{mglPoint} p1)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_cut_box (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2)
 @end ifclear
 Π—Π°Π΄Π°Π΅Ρ‚ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π΅ Ρ€ΠΈΡΡƒΡŽΡ‚ся. Π•сли Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ€Π°Π²Π½Ρ‹), Ρ‚ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄Π° ΡΡ‡ΠΈΡ‚аСтся ΠΏΡƒΡΡ‚Ρ‹ΠΌ. @sref{CutMinMax sample}
 @end deftypefn
 
 @deftypefn {MGL command} {} cut 'cond'
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} CutOff (@code{const char *}cond)
-@deftypefnx {C function} @code{void} mgl_set_cutoff (@code{HMGL} gr, @code{const char *}cond)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} CutOff (@code{const char *}cond)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_cutoff (@code{HMGL} gr, @code{const char *}cond)
 @end ifclear
 Π—Π°Π΄Π°Π΅Ρ‚ ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΎΠ±Ρ€Π΅Π·Π°Π½ΠΈΡ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ @var{cond}. Π­Ρ‚ΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈΠ· Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΅ΡΠ»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ Π½Π΅ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ @code{""} Π΄Π»Ρ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΡƒΡΠ»ΠΎΠ²ΠΈΡ ΠΎΠ±Ρ€Π΅Π·Π°Π½ΠΈΡ. @sref{CutOff sample}
 @end deftypefn
@@ -299,20 +310,20 @@ MGL Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ
 
 @anchor{font}
 @deftypefn {MGL command} {} font 'fnt' [@code{val=6}]
-Π—Π°Π΄Π°Π΅Ρ‚ ΡΡ‚ΠΈΠ»ΡŒ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° (@pxref{Text printing}). Π’Π½Π°Ρ‡Π°Π»Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся @samp{:rC} -- ΠΏΡ€ΡΠΌΠΎΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ Ρ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ. ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΠΉ ΠΎΡΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² 1.4 Ρ€Π°Π·Π° Π±ΠΎΠ»ΡŒΡˆΠ΅. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @pxref{Font styles}.
+Π—Π°Π΄Π°Π΅Ρ‚ ΡΡ‚ΠΈΠ»ΡŒ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° (см. @ref{Text printing}). Π’Π½Π°Ρ‡Π°Π»Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся @samp{:rC} -- ΠΏΡ€ΡΠΌΠΎΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ Ρ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ. ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΠΉ ΠΎΡΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² 1.4 Ρ€Π°Π·Π° Π±ΠΎΠ»ΡŒΡˆΠ΅. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΌ. @ref{Font styles}.
 @end deftypefn
 
 @anchor{rotatetext}
 @deftypefn {MGL command} {} rotatetext @code{val}
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetRotatedText (@code{bool} val)
-@deftypefnx {C function} @code{void} mgl_set_rotated_text (@code{HMGL} gr, @code{int} val)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetRotatedText (@code{bool} val)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_rotated_text (@code{HMGL} gr, @code{int} val)
 Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΠΉ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²Π΄ΠΎΠ»ΡŒ ΠΎΡΠΈ.
 @end deftypefn
 
 @ifclear UDAV
-@deftypefn {Method on @code{mglGraph}} @code{void} SetFontDef (@code{const char *}fnt)
-@deftypefnx {C function} @code{void} mgl_set_font_def (@code{HMGL} gr, @code{const char *} val)
-Π—Π°Π΄Π°Π΅Ρ‚ ΡΡ‚ΠΈΠ»ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚Π° (@pxref{Text printing}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ @samp{rC} -- ΠΏΡ€ΡΠΌΠΎΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ Ρ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ.
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetFontDef (@code{const char *}fnt)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_font_def (@code{HMGL} gr, @code{const char *} val)
+Π—Π°Π΄Π°Π΅Ρ‚ ΡΡ‚ΠΈΠ»ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚Π° (см. @ref{Text printing}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ @samp{rC} -- ΠΏΡ€ΡΠΌΠΎΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ Ρ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ.
 @end deftypefn
 
 @deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetFontSize (@code{float} val)
@@ -358,10 +369,10 @@ MGL Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ
 @anchor{palette}
 @deftypefn {MGL command} {} palette 'colors'
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetPalette (@code{const char *}@var{colors})
-@deftypefnx {C function} @code{void} mgl_set_palette (@code{HMGL} gr, @code{const char *}@var{colors})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetPalette (@code{const char *}@var{colors})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_palette (@code{HMGL} gr, @code{const char *}@var{colors})
 @end ifclear
-Π—Π°Π΄Π°Π΅Ρ‚ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠ². Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ @code{"Hbgrcmyhlnqeup"}, Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΡ‚вСтствуСт Ρ†Π²Π΅Ρ‚Π°ΠΌ: Ρ‚Π΅ΠΌΠ½ΠΎ ΡΠ΅Ρ€Ρ‹ΠΉ @samp{H}, ΡΠΈΠ½ΠΈΠΉ @samp{b}, Π·Π΅Π»Π΅Π½Ρ‹ΠΉ @samp{g}, ΠΊΡ€Π°ΡΠ½Ρ‹ΠΉ @samp{r}, Π³ΠΎΠ»ΡƒΠ±ΠΎΠΉ @samp{c}, ΠΌΠ°Π»ΠΈΠ½ΠΎΠ²Ρ‹ΠΉ @samp{m}, ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ @samp{y}, ΡΠ΅Ρ€Ρ‹ΠΉ @samp{h}, ΡΠΈΠ½Π΅-Π·Π΅Π»Π΅Π½Ρ‹ΠΉ  @samp{l}, Π½Π΅Π±Π΅ΡΠ½ΠΎ-Π³ΠΎΠ»ΡƒΠ±ΠΎΠΉ @samp{n}, ΠΎΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΉ @samp{q}, ΠΆΠ΅Π»Ρ‚ΠΎ-Π·Π΅Π»Π΅Π½Ρ‹ΠΉ @samp{e}, ΡΠΈΠ½Π΅-Ρ„ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΉ @samp{u}, Ρ„ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΉ @samp{p}. ΠŸΠ°Π»ΠΈΡ‚Ρ€Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Π² 1D Π³Ρ€Π°Ρ„ΠΈΠΊΠ°Ρ… (@pxref{1D plotting}) Π΄Π»Ρ ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Ρ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΡΡ‚ΠΈΠ»Π΅ΠΌ Π»ΠΈΠ½ΠΈΠΈ.
+Π—Π°Π΄Π°Π΅Ρ‚ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠ². Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ @code{"Hbgrcmyhlnqeup"}, Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΡ‚вСтствуСт Ρ†Π²Π΅Ρ‚Π°ΠΌ: Ρ‚Π΅ΠΌΠ½ΠΎ ΡΠ΅Ρ€Ρ‹ΠΉ @samp{H}, ΡΠΈΠ½ΠΈΠΉ @samp{b}, Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ @samp{g}, ΠΊΡ€Π°ΡΠ½Ρ‹ΠΉ @samp{r}, Π³ΠΎΠ»ΡƒΠ±ΠΎΠΉ @samp{c}, ΠΌΠ°Π»ΠΈΠ½ΠΎΠ²Ρ‹ΠΉ @samp{m}, ΠΆΡ‘Π»Ρ‚Ρ‹ΠΉ @samp{y}, ΡΠ΅Ρ€Ρ‹ΠΉ @samp{h}, ΡΠΈΠ½Π΅-Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ  @samp{l}, Π½Π΅Π±Π΅ΡΠ½ΠΎ-Π³ΠΎΠ»ΡƒΠ±ΠΎΠΉ @samp{n}, ΠΎΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΉ @samp{q}, ΠΆΠ΅Π»Ρ‚ΠΎ-Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ @samp{e}, ΡΠΈΠ½Π΅-Ρ„ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΉ @samp{u}, Ρ„ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΉ @samp{p}. ΠŸΠ°Π»ΠΈΡ‚Ρ€Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Π² 1D Π³Ρ€Π°Ρ„ΠΈΠΊΠ°Ρ… (см. @ref{1D plotting}) Π΄Π»Ρ ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Ρ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ ΡΡ‚ΠΈΠ»Π΅ΠΌ Π»ΠΈΠ½ΠΈΠΈ.
 @end deftypefn
 
 @c ==================================================================
@@ -372,18 +383,20 @@ MGL Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ
 @cindex SetWarn
 @cindex GetWarn
 
-Ð\95Γ‘\81Γ‘\82Γ‘\8c 2 ΓΒΏΓΒ΅Γ‘\80СмСннÑ\8bС ΓΒΏΓΒΎΓΒΊΓΒ°ΓΒ·Γ‘\8bваÑ\8eΓ‘\89иС ΓΒ½ΓΒ°ΓΒ»ΓΒΈΓ‘\87иС ΓΒΏΓ‘\80СдÑ\83пÑ\80СТдСниÑ\8f/оÑ\88ибки ΓΒΏΓ‘\80и Γ‘\81оздании ΓΒ³Γ‘\80аÑ\84ика. Γ\9eбÑ\8bΓ‘\87но ΓΒ²Γ‘\8b ΓΒ΄ΓΒΎΓΒ»ΓΒΆΓΒ½Γ‘\8b Γ‘\81бÑ\80оÑ\81иÑ\82Γ‘\8c ΓΒΈΓ‘\85 Γ‘\81 ΓΒΏΓΒΎΓΒΌΓΒΎΓ‘\89Γ‘\8cΓ‘\8e @code{SetWarn(0);} ΓΒΏΓΒ΅Γ‘\80Сд ΓΒΏΓΒΎΓ‘\81Γ‘\82Γ‘\80оСниСм ΓΒΈ ΓΒΏΓ‘\80овСÑ\80иÑ\82Γ‘\8c ΓΒΏΓΒ΅Γ‘\80СмСннÑ\83Γ‘\8e @var{WarnCode} Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡˆΠΈΠ±ΠΎΠΊ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΡ‚роСния. Π’олько ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠΎΡ…раняСтся. Π—Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Π²ΡΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ/ошибки Π² MathGL Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ся ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ -- Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΡ€ΠΎΡΡ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½.
+Ð\9eбÑ\8bΓ‘\87но ΓΒ²Γ‘\8b ΓΒ΄ΓΒΎΓΒ»ΓΒΆΓΒ½Γ‘\8b Γ‘\81бÑ\80оÑ\81иÑ\82Γ‘\8c ΓΒΏΓ‘\80изнак ΓΒΎΓ‘\88ибки Γ‘\81 ΓΒΏΓΒΎΓΒΌΓΒΎΓ‘\89Γ‘\8cΓ‘\8e @code{SetWarn(0);} ΓΒΏΓΒ΅Γ‘\80Сд ΓΒΏΓΒΎΓ‘\81Γ‘\82Γ‘\80оСниСм ΓΒΈ ΓΒΏΓ‘\80овСÑ\80иÑ\82Γ‘\8c @code{GetWarnCode()} ΓΒΈΓΒ»ΓΒΈ @code{Message()} Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡˆΠΈΠ±ΠΎΠΊ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΡ‚роСния. Π’олько ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠΎΡ…раняСтся. Π—Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Π²ΡΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ/ошибки Π² MathGL Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ся ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ -- Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΡ€ΠΎΡΡ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½.
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetWarn (@code{int} code)
-Π—Π°Π΄Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»Ρ ΠΎΡ‡ΠΈΡΡ‚ΠΊΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ (@code{SetWarn(0);}) ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetWarn (@code{int} code, @code{const char *}info=@code{""})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_warn (@code{HMGL} gr, @code{int} code, @code{const char *}info)
+Π—Π°Π΄Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»Ρ ΠΎΡ‡ΠΈΡΡ‚ΠΊΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ (@code{SetWarn(0);}) ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’Скст @var{info} Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡΠΌ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ @var{code}<0.
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Message (@code{char *}buf)
-Π—Π°Π΄Π°Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€ Π΄Π»Ρ Π²Ρ‹Π²ΠΎΠ΄Π° ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΎΡ‚сутствия Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π•сли Ρ€Π°Π²Π΅Π½ NULL, Ρ‚ΠΎ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΡΡ‚ся. Π Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 1024 Π±Π°ΠΉΡ‚. Π•сли @var{buf}[0]==0, Ρ‚ΠΎ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ Π½Π΅Ρ‚.
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{const char *}Message ()
+@deftypefnx {Ѐункция Π‘} @code{const char *}mgl_get_mess (@code{HMGL} gr)
+Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Скст ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΎΡ‚сутствия Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π•сли Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠ°Ρ ΡΡ‚Ρ€ΠΎΠΊΠ° ΠΏΡƒΡΡ‚ая, Ρ‚ΠΎ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ Π½Π΅Ρ‚.
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{int} GetWarn ()
-@deftypefnx {C function} @code{int} mgl_get_warn (@code{HMGL} gr)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{int} GetWarnCode ()
+@deftypefnx {Ѐункция Π‘} @code{int} mgl_get_warn_code (@code{HMGL} gr)
 Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΎΡ‚сутствия Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ:
 @table @code
 @item mglWarnNone=0
@@ -422,19 +435,19 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 
 
 @c ==================================================================
-@node Axis settings, Transformation matrix, Graphics setup, MathGL core
+@node Axis settings, Subplots and rotation, Graphics setup, MathGL core
 @section ΠΠ°ΡΡ‚Ρ€ΠΎΠΉΠΊΠΈ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚
 
-Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ Π²ΠΈΠ΄ΠΎΠΌ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΎΠΌ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ся 3 ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ: ΡΠ½Π°Ρ‡Π°Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ‚ΠΎΡ‡ΠΊΠΈ (@pxref{Cutting}), Π΄Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ся Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ ΠΊΡ€ΠΈΠ²ΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ† Ρ‚ΠΎΡ‡ΠΊΠ° ΠΎΡ‚обраТаСтся.
+Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ Π²ΠΈΠ΄ΠΎΠΌ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΎΠΌ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ся 3 ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ: ΡΠ½Π°Ρ‡Π°Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ‚ΠΎΡ‡ΠΊΠΈ (см. @ref{Cutting}), Π΄Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ся Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ ΠΊΡ€ΠΈΠ²ΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ† Ρ‚ΠΎΡ‡ΠΊΠ° ΠΎΡ‚обраТаСтся.
 
 @menu
 * Ranges (bounding box)::
-* Transformation::
+* Curved coordinates::
 * Ticks::
 @end menu
 
 @c ------------------------------------------------------------------
-@node Ranges (bounding box), Transformation, , Axis settings
+@node Ranges (bounding box), Curved coordinates, , Axis settings
 @subsection ΠœΠ°ΡΡˆΡ‚Π°Π± ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚
 @cindex CRange
 @cindex XRange
@@ -457,20 +470,19 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @deftypefnx {MGL command} {} zrange @code{v1 v2}
 @deftypefnx {MGL command} {} crange @code{v1 v2}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetRange (@code{char} dir, @code{float} v1, @code{float} v2)
-@deftypefnx {C function} @code{void} mgl_set_range_val (@code{HMGL} gr, @code{char} dir, @code{float} v1, @code{float} v2)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetRange (@code{char} dir, @code{float} v1, @code{float} v2)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_range_val (@code{HMGL} gr, @code{char} dir, @code{float} v1, @code{float} v2)
 @end ifclear
 Π—Π°Π΄Π°Π΅Ρ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ @samp{x}-,@samp{y}-,@samp{z}-,@samp{c}-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{ranges}.
 @end deftypefn
 
-
 @deftypefn {MGL command} {} xrange dat [@code{add=off}]
 @deftypefnx {MGL command} {} yrange dat [@code{add=off}]
 @deftypefnx {MGL command} {} zrange dat [@code{add=off}]
 @deftypefnx {MGL command} {} crange dat [@code{add=off}]
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetRange (@code{char} dir, @code{const mglData &}dat, @code{bool} add=@code{false})
-@deftypefnx {C function} @code{void} mgl_set_range_dat (@code{HMGL} gr, @code{char} dir, @code{const HCDT} a, @code{int} add)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetRange (@code{char} dir, @code{const mglData &}dat, @code{bool} add=@code{false})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_range_dat (@code{HMGL} gr, @code{char} dir, @code{const HCDT} a, @code{int} add)
 @end ifclear
 Π—Π°Π΄Π°Π΅Ρ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ @samp{x}-,@samp{y}-,@samp{z}-,@samp{c}-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° @var{dat}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{add} ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ.
 @end deftypefn
@@ -478,17 +490,17 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @anchor{ranges}
 @deftypefn {MGL command} {} ranges @code{x1 x2 y1 y2 [z1=0 z2=0]}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetRanges (@code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1=@code{0}, @code{float} z2=@code{0})
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetRanges (@code{mglPoint} p1, @code{mglPoint} p2)
-@deftypefnx {C function} @code{void} mgl_set_ranges (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1, @code{float} z2)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetRanges (@code{mglPoint} p1, @code{mglPoint} p2)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetRanges (@code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1=@code{0}, @code{float} z2=@code{0})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_ranges (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1, @code{float} z2)
 @end ifclear
 Π—Π°Π΄Π°Π΅Ρ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π•сли ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ€Π°Π²Π½Ρ‹, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ся ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΌΡƒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ. Π’Π°ΠΊΠΆΠ΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅  @code{crange z1 z2}. ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ Ρ€Π°Π²Π½Ρ‹ [-1, 1].
 @end deftypefn
 
 @ifclear UDAV
-@deftypefn {Method on @code{mglGraph}} @code{void} SetRanges (@code{const mglData &}xx, @code{const mglData &}yy)
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetRanges (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz)
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetRanges (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz, @code{const mglData &}cc)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetRanges (@code{const mglData &}xx, @code{const mglData &}yy)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetRanges (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetRanges (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz, @code{const mglData &}cc)
 Π—Π°Π΄Π°Π΅Ρ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ @samp{x}-,@samp{y}-,@samp{z}-,@samp{c}-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{xx}, @var{yy}, @var{zz}, @var{cc} ΡΠΎΠΎΡ‚вСтствСнно.
 @end deftypefn
 @end ifclear
@@ -496,16 +508,16 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @anchor{origin}
 @deftypefn {MGL command} {} origin @code{x0 y0 [z0=nan]}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetOrigin (@code{float} x0, @code{float} y0, @code{float} z0=@code{NAN})
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetOrigin (@code{mglPoint} p0)
-@deftypefnx {C function} @code{void} mgl_set_origin (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetOrigin (@code{mglPoint} p0)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetOrigin (@code{float} x0, @code{float} y0, @code{float} z0=@code{NAN})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_origin (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0)
 @end ifclear
 Π—Π°Π΄Π°Π΅Ρ‚ Ρ†Π΅Π½Ρ‚Ρ€ ΠΏΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΡ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π•сли ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π²Π½ΠΎ NAN, Ρ‚ΠΎ MathGL ΠΏΠΎΠΏΡ‹Ρ‚аСтся Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎ ΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ.
 @end deftypefn
 
 
 @c ------------------------------------------------------------------
-@node Transformation, Ticks, Ranges (bounding box), Axis settings
+@node Curved coordinates, Ticks, Ranges (bounding box), Axis settings
 @subsection ΠšΡ€ΠΈΠ²ΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹
 @cindex Axis
 @ifclear UDAV
@@ -516,31 +528,31 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 
 @deftypefn {MGL command} {} axis 'fx' 'fy' ['fz'='' 'fa'='']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetFunc (@code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ=@code{""}, @code{const char *}EqA=@code{""})
-@deftypefnx {C function} @code{void} mgl_set_func (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ, @code{const char *}EqA)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetFunc (@code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ=@code{""}, @code{const char *}EqA=@code{""})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_func (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ, @code{const char *}EqA)
 @end ifclear
-Π—Π°Π΄Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ ΠΊΡ€ΠΈΠ²ΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ. ΠšΠ°ΠΆΠ΄Π°Ρ ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΌΠ°Ρ‚СматичСским Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π·Π°Π²ΠΈΡΡΡ‰ΠΈΠΌ ΠΎΡ‚ ΡΡ‚Π°Ρ€Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ @samp{x}, @samp{y}, @samp{z} ΠΈ @samp{a} ΠΈΠ»ΠΈ @samp{c} Π΄Π»Ρ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹. ΠΠ°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π»Ρ Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€ΠΈΡ‡Π΅ΡΠΊΠΈΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ @code{Axis("x*cos(y)", "x*sin(y)", "z");}. Π”ля ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ Ρ„ΠΎΡ€ΠΌΡƒΠ» ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡƒΡΡ‚Ρ‹ΠΌ ΠΈΠ»ΠΈ @code{NULL}. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ» ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π΅Π³ΠΊΠ° Π·Π°ΠΌΠ΅Π΄Π»ΡΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‚.Π΅.. @code{Axis("", "", "")} Π±Ρ‹ΡΡ‚Ρ€Π΅Π΅ Ρ‡Π΅ΠΌ @code{Axis("1*x", "1*y", "1*z")}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{EqA} Π·Π°Π΄Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ Π΄Π»Ρ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹. @xref{Textual formulas}.
+Π—Π°Π΄Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ ΠΊΡ€ΠΈΠ²ΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ. ΠšΠ°ΠΆΠ΄Π°Ρ ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΌΠ°Ρ‚СматичСским Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π·Π°Π²ΠΈΡΡΡ‰ΠΈΠΌ ΠΎΡ‚ ΡΡ‚Π°Ρ€Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ @samp{x}, @samp{y}, @samp{z} ΠΈ @samp{a} ΠΈΠ»ΠΈ @samp{c} Π΄Π»Ρ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹. ΠΠ°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π»Ρ Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€ΠΈΡ‡Π΅ΡΠΊΠΈΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ @code{SetFunc("x*cos(y)", "x*sin(y)", "z");}. Π”ля ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ Ρ„ΠΎΡ€ΠΌΡƒΠ» ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡƒΡΡ‚Ρ‹ΠΌ ΠΈΠ»ΠΈ @code{NULL}. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ» ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π΅Π³ΠΊΠ° Π·Π°ΠΌΠ΅Π΄Π»ΡΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{EqA} Π·Π°Π΄Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ Π΄Π»Ρ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹. @xref{Textual formulas}.
 @end deftypefn
 
 @deftypefn {MGL command} {} axis @code{how}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetCoor (@code{int} how)
-@deftypefnx {C function} @code{void} mgl_set_coor (@code{HMGL} gr, @code{int} how)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetCoor (@code{int} how)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_coor (@code{HMGL} gr, @code{int} how)
 @end ifclear
-УстанавливаСт ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΡΠΈΡΡ‚Π΅ΠΌ ΠΊΡ€ΠΈΠ²ΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° @var{how}: @code{mglCartesian=0} -- Π΄Π΅ΠΊΠ°Ρ€Ρ‚ΠΎΠ²Π° ΡΠΈΡΡ‚Π΅ΠΌΠ° (Π½Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Ρ‹ΡΡ‚рая); @code{mglPolar=1} -- ΠΏΠΎΠ»ΡΡ€Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=x*cos(y),y_n=x*sin(y), z_n=z}; @code{mglSpherical=2} -- ΡΡ„СричСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y)}; @code{mglParabolic=3} -- ΠΏΠ°Ρ€Π°Π±ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=x*y, y_n=(x*x-y*y)/2, z_n=z}; @code{mglParaboloidal=4} -- Paraboloidal coordinates @math{x_n=(x*x-y*y)*cos(z)/2, y_n=(x*x-y*y)*sin(z)/2, z_n=x*y}; @code{mglOblate=5} -- Oblate coordinates @math{x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z), z_n=sinh(x)*sin(y)}; @code{mglProlate=6} -- Prolate coordinates @math{x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z), z_n=cosh(x)*cos(y)}; @code{mglElliptic=7} -- ΡΠ»Π»ΠΈΠΏΡ‚ичСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z}; @code{mglToroidal=8} -- Ρ‚ΠΎΡ€ΠΎΠΈΠ΄Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)), y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y))}; @code{mglBispherical=9} -- Π±ΠΈΡΡ„СричСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=sin(y)*cos(z)/(cosh(x)-cos(y)), y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y))}; @code{mglBipolar=10} -- Π±ΠΈΠΏΠΎΠ»ΡΡ€Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z}.
+УстанавливаСт ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΡΠΈΡΡ‚Π΅ΠΌ ΠΊΡ€ΠΈΠ²ΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° @var{how}: @code{mglCartesian=0} -- Π΄Π΅ΠΊΠ°Ρ€Ρ‚ΠΎΠ²Π° ΡΠΈΡΡ‚Π΅ΠΌΠ° (Π½Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Ρ‹ΡΡ‚рая); @code{mglPolar=1} -- ΠΏΠΎΠ»ΡΡ€Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=x*cos(y),y_n=x*sin(y), z_n=z}; @code{mglSpherical=2} -- ΡΡ„СричСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y)}; @code{mglParabolic=3} -- ΠΏΠ°Ρ€Π°Π±ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=x*y, y_n=(x*x-y*y)/2, z_n=z}; @code{mglParaboloidal=4} -- Paraboloidal coordinates @math{x_n=(x*x-y*y)*cos(z)/2, y_n=(x*x-y*y)*sin(z)/2, z_n=x*y}; @code{mglOblate=5} -- Oblate coordinates @math{x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z), z_n=sinh(x)*sin(y)}; @code{mglProlate=6} -- Prolate coordinates @math{x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z), z_n=cosh(x)*cos(y)}; @code{mglElliptic=7} -- ΡΠ»Π»ΠΈΠΏΡ‚ичСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z}; @code{mglToroidal=8} -- Ρ‚ΠΎΡ€ΠΎΠΈΠ΄Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)), y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y))}; @code{mglBispherical=9} -- Π±ΠΈΡΡ„СричСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=sin(y)*cos(z)/(cosh(x)-cos(y)), y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y))}; @code{mglBipolar=10} -- Π±ΠΈΠΏΠΎΠ»ΡΡ€Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z}; @code{mglLogLog=11} -- log-log ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=lg(x), y_n=lg(y), z_n=lg(z)}; @code{mglLogX=12} -- log-x ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=lg(x), y_n=y, z_n=z}; @code{mglLogY=13} -- log-y ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @math{x_n=x, y_n=lg(y), z_n=z}.
 @end deftypefn
 
 @anchor{ternary}
 @deftypefn {MGL command} {} ternary @code{val}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Ternary (@code{bool} tern)
-@deftypefnx {C function} @code{void} mgl_set_ternary (@code{HMGL} gr, @code{int} tern)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Ternary (@code{int} tern)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_ternary (@code{HMGL} gr, @code{int} tern)
 @end ifclear
-Ð\97адаСÑ\82 Γ‘\80иÑ\81ованиС Γ‘\82Γ‘\80СÑ\83голÑ\8cнÑ\8bΓ‘\85 (Ternary) ΓΒΎΓ‘\81Сй ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82. ΓΒ­Γ‘\82о Γ‘\81пСÑ\86иалÑ\8cнÑ\8bй Γ‘\82ип ΓΒ³Γ‘\80аÑ\84ика ΓΒ΄ΓΒ»Γ‘\8f 3 ΓΒ·ΓΒ°ΓΒ²ΓΒΈΓ‘\81имÑ\8bΓ‘\85 ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82 (компонСнÑ\82) @var{a}, @var{b}, @var{c} Γ‘\82акиÑ\85, Γ‘\87Γ‘\82о @var{a}+@var{b}+@var{c}=1. MathGL ΓΒΈΓ‘\81полÑ\8cзÑ\83СÑ\82 Γ‘\82олÑ\8cко 2 ΓΒ½ΓΒ΅ΓΒ·ΓΒ°ΓΒ²ΓΒΈΓ‘\81имÑ\8bС ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82Γ‘\8b @var{a}=x ΓΒΈ @var{b}=y ΓΒΏΓΒΎΓ‘\81колÑ\8cкÑ\83 ΓΒΈΓ‘\85 ΓΒ΄ΓΒΎΓ‘\81Γ‘\82аÑ\82оÑ\87но ΓΒ΄ΓΒ»Γ‘\8f ΓΒΏΓΒΎΓ‘\81Γ‘\82Γ‘\80оСниÑ\8f ΓΒ²Γ‘\81СÑ\85 ΓΒ³Γ‘\80аÑ\84иков. Γ\9fΓ‘\80и Γ‘\8dΓ‘\82ом Γ‘\82Γ‘\80СÑ\82Γ‘\8cΓ‘\8f ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82а z Γ‘\8fвлÑ\8fСÑ\82Γ‘\81Γ‘\8f ΓΒ½ΓΒ΅ΓΒ·ΓΒ°ΓΒ²ΓΒΈΓ‘\81имÑ\8bм ΓΒΏΓΒ°Γ‘\80амСÑ\82Γ‘\80ом ΓΒ΄ΓΒ»Γ‘\8f ΓΒΏΓΒΎΓ‘\81Γ‘\82Γ‘\80оСниÑ\8f ΓΒ»ΓΒΈΓΒ½ΓΒΈΓΒΉ Γ‘\83Γ‘\80овнÑ\8f, ΓΒΏΓΒΎΓΒ²ΓΒ΅Γ‘\80Γ‘\85ноÑ\81Γ‘\82Сй ΓΒΈ Γ‘\82.д. @sref{Ternary plot sample}
+Ð\97адаСÑ\82 Γ‘\80иÑ\81ованиС Γ‘\82Γ‘\80СÑ\83голÑ\8cнÑ\8bΓ‘\85 (Ternary) ΓΒΈΓΒ»ΓΒΈ ΓΒΏΓΒΈΓ‘\80амидалÑ\8cнÑ\8bΓ‘\85 (Quaternary) ΓΒΎΓ‘\81Сй ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82. ΓΒ­Γ‘\82о Γ‘\81пСÑ\86иалÑ\8cнÑ\8bй Γ‘\82ип ΓΒ³Γ‘\80аÑ\84ика ΓΒ΄ΓΒ»Γ‘\8f 3 ΓΒ·ΓΒ°ΓΒ²ΓΒΈΓ‘\81имÑ\8bΓ‘\85 ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82 (компонСнÑ\82) @var{a}, @var{b}, @var{c} Γ‘\82акиÑ\85, Γ‘\87Γ‘\82о @var{a}+@var{b}+@var{c}=1. MathGL ΓΒΈΓ‘\81полÑ\8cзÑ\83СÑ\82 Γ‘\82олÑ\8cко 2 ΓΒ½ΓΒ΅ΓΒ·ΓΒ°ΓΒ²ΓΒΈΓ‘\81имÑ\8bС ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82Γ‘\8b @var{a}=x ΓΒΈ @var{b}=y ΓΒΏΓΒΎΓ‘\81колÑ\8cкÑ\83 ΓΒΈΓ‘\85 ΓΒ΄ΓΒΎΓ‘\81Γ‘\82аÑ\82оÑ\87но ΓΒ΄ΓΒ»Γ‘\8f ΓΒΏΓΒΎΓ‘\81Γ‘\82Γ‘\80оСниÑ\8f ΓΒ²Γ‘\81СÑ\85 ΓΒ³Γ‘\80аÑ\84иков. Γ\9fΓ‘\80и Γ‘\8dΓ‘\82ом Γ‘\82Γ‘\80СÑ\82Γ‘\8cΓ‘\8f ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82а z Γ‘\8fвлÑ\8fСÑ\82Γ‘\81Γ‘\8f ΓΒ½ΓΒ΅ΓΒ·ΓΒ°ΓΒ²ΓΒΈΓ‘\81имÑ\8bм ΓΒΏΓΒ°Γ‘\80амСÑ\82Γ‘\80ом ΓΒ΄ΓΒ»Γ‘\8f ΓΒΏΓΒΎΓ‘\81Γ‘\82Γ‘\80оСниÑ\8f ΓΒ»ΓΒΈΓΒ½ΓΒΈΓΒΉ Γ‘\83Γ‘\80овнÑ\8f, ΓΒΏΓΒΎΓΒ²ΓΒ΅Γ‘\80Γ‘\85ноÑ\81Γ‘\82Сй ΓΒΈ Γ‘\82.д. ΓΒ‘ооÑ\82вСÑ\82Γ‘\81Γ‘\82вСнно Quaternary ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82Γ‘\8b -- 4 ΓΒ½ΓΒ΅ΓΒ·ΓΒ°ΓΒ²ΓΒΈΓ‘\81имÑ\8bС ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82Γ‘\8b @var{a}, @var{b}, @var{c} ΓΒΈ @var{d}, Γ‘\82акиС Γ‘\87Γ‘\82о @var{a}+@var{b}+@var{c}+@var{d}=1. Γ\98Γ‘\81полÑ\8cзÑ\83йÑ\82С @code{Ternary(0)}. @sref{Ternary axis}
 @end deftypefn
 
 @c ------------------------------------------------------------------
-@node Ticks, , Transformation, Axis settings
+@node Ticks, , Curved coordinates, Axis settings
 @subsection ΠœΠ΅Ρ‚ΠΊΠΈ ΠΎΡΠ΅ΠΉ
 @cindex AxisStl
 @cindex TickLen
@@ -561,30 +573,13 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @cindex SetTickSkip
 @end ifclear
 
-@anchor{ticklen}
-@deftypefn {MGL command} {} ticklen @code{val} [@code{stt=1}]
-@ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetTickLen (@code{float} val, @code{float} stt=@code{1})
-@deftypefnx {C function} @code{void} mgl_set_tick_len (@code{HMGL} gr, @code{float} val, @code{float} stt)
-@end ifclear
-Π—Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ @code{0.1}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{stt}>0 Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ ΠΏΠΎΠ΄ΠΌΠ΅Ρ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² @code{sqrt(1+stt)} Ρ€Π°Π· ΠΌΠ΅Π½ΡŒΡˆΠ΅.
-@end deftypefn
-
-@deftypefn {MGL command} {} axisstl 'stl' ['tck'='' 'sub'='']
-@ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetAxisStl (@code{const char *}stl=@code{"k"}, @code{const char *}tck=@code{0}, @code{const char *}sub=@code{0})
-@deftypefnx {C function} @code{void} mgl_set_axis_stl (@code{HMGL} gr, @code{const char *}stl, @code{const char *}tck, @code{const char *}sub)
-@end ifclear
-Π—Π°Π΄Π°Π΅Ρ‚ ΡΡ‚ΠΈΠ»ΡŒ ΠΎΡΠ΅ΠΉ (@var{stl}), ΠΌΠ΅Ρ‚ΠΎΠΊ (@var{tck}) ΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Ρ‚ΠΎΠΊ (@var{sub}) ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π•сли @var{stl} ΠΏΡƒΡΡ‚ая ΠΈΠ»ΠΈ Π½ΠΎΠ»ΡŒ, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΡ‚ΠΈΠ»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@samp{k} ΠΈΠ»ΠΈ @samp{w} Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΠΈ). Π•сли  @var{tck}, @var{sub} ΠΏΡƒΡΡ‚ая ΠΈΠ»ΠΈ Π½ΠΎΠ»ΡŒ, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΡ‚ΠΈΠ»ΡŒ ΠΎΡΠ΅ΠΉ (Ρ‚.Π΅. @var{stl}).
-@end deftypefn
-
 @anchor{adjust}
 @deftypefn {MGL command} {} adjust ['dir'='xyzc']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Adjust (@code{const char *}dir=@code{"xyz"})
-@deftypefnx {C function} @code{void} mgl_adjust_ticks (@code{HMGL} gr, @code{const char *}dir)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Adjust (@code{const char *}dir=@code{"xyzc"})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_adjust_ticks (@code{HMGL} gr, @code{const char *}dir)
 @end ifclear
-АвтоматичСски Π·Π°Π΄Π°Π΅Ρ‚ ΡˆΠ°Π³ ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΎΡΠ΅ΠΉ, Ρ‡ΠΈΡΠ»ΠΎ ΠΏΠΎΠ΄ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠΊ Π΄Π»Ρ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ @var{dir} Π² Π²ΠΈΠ΄Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ Π΄Π»Ρ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°. Π’Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Π΅Ρ‚ @code{SetTuneTicks(true)}.
+АвтоматичСски Π·Π°Π΄Π°Π΅Ρ‚ ΡˆΠ°Π³ ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΎΡΠ΅ΠΉ, Ρ‡ΠΈΡΠ»ΠΎ ΠΏΠΎΠ΄ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠΊ Π΄Π»Ρ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ @var{dir} Π² Π²ΠΈΠ΄Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ Π΄Π»Ρ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°. Π’Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Π΅Ρ‚ @code{SetTuneTicks(true)}. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Ρ‚рСбуСтся Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΡΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΡ€ΠΎΠΌΠ΅ ΡΠ»ΡƒΡ‡Π°Ρ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ Π½Π°ΡΡ‚Ρ€ΠΎΠ΅ΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
 @end deftypefn
 
 @anchor{xtick}
@@ -596,27 +591,27 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @deftypefnx {MGL command} {} ztick @code{val [sub=0 org=nan]}
 @deftypefnx {MGL command} {} ctick @code{val [sub=0 org=nan]}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetTicks (@code{char} dir, @code{float} d=@code{0}, @code{int} ns=@code{0}, @code{float} org=@code{NAN})
-@deftypefnx {C function} @code{void} mgl_set_ticks_dir (@code{HMGL} gr, @code{char} dir, @code{float} d, @code{int} ns, @code{float} org)
-@deftypefnx {C function} @code{void} mgl_set_ticks(@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} nz)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetTicks (@code{char} dir, @code{float} d=@code{0}, @code{int} ns=@code{0}, @code{float} org=@code{NAN})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_ticks_dir (@code{HMGL} gr, @code{char} dir, @code{float} d, @code{int} ns, @code{float} org)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_ticks (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} nz)
 @end ifclear
-Ð\97адаСÑ\82 Γ‘\88аг ΓΒΌΓΒ΅Γ‘\82ок ΓΒΎΓ‘\81Сй @var{d}, Γ‘\87иÑ\81ло ΓΒΏΓΒΎΓΒ΄ΓΒΌΓΒ΅Γ‘\82ок @var{ns} ΓΒΈ ΓΒ½ΓΒ°Γ‘\87алÑ\8cноС ΓΒΏΓΒΎΓΒ»ΓΒΎΓΒΆΓΒ΅ΓΒ½ΓΒΈΓΒ΅ ΓΒΌΓΒ΅Γ‘\82ок @var{org} ΓΒ΄ΓΒ»Γ‘\8f ΓΒΎΓ‘\81и ΓΒ²ΓΒ΄ΓΒΎΓΒ»Γ‘\8c ΓΒ½ΓΒ°ΓΒΏΓ‘\80авлСниÑ\8f @var{dir} (иÑ\81полÑ\8cзÑ\83йÑ\82С 'c' ΓΒ΄ΓΒ»Γ‘\8f ΓΒΌΓΒ΅Γ‘\82ок colorbar). Γ\9fСÑ\80СмСннаÑ\8f @var{d} ΓΒ·ΓΒ°ΓΒ΄ΓΒ°ΓΒ΅Γ‘\82 Γ‘\88аг ΓΒΌΓΒ΅Γ‘\82ок (СÑ\81ли ΓΒΏΓΒΎΓΒ»ΓΒΎΓΒΆΓΒΈΓ‘\82СлÑ\8cна) ΓΒΈΓΒ»ΓΒΈ ΓΒΈΓ‘\85 Γ‘\87иÑ\81ло ΓΒ½ΓΒ° ΓΒΎΓ‘\81и (СÑ\81ли ΓΒΎΓ‘\82Γ‘\80иÑ\86аÑ\82СлÑ\8cна). Γ\9dΓ‘\83лСвоС ΓΒ·ΓΒ½ΓΒ°Γ‘\87СниС ΓΒ·ΓΒ°ΓΒ΄ΓΒ°ΓΒ΅Γ‘\82 ΓΒ»ΓΒΎΓΒ³ΓΒ°Γ‘\80иÑ\84миÑ\87СÑ\81киС ΓΒΌΓΒ΅Γ‘\82ки. Π•сли @var{org}=@code{NAN}, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ @var{Org}.
+Ð\97адаСÑ\82 Γ‘\88аг ΓΒΌΓΒ΅Γ‘\82ок ΓΒΎΓ‘\81Сй @var{d}, Γ‘\87иÑ\81ло ΓΒΏΓΒΎΓΒ΄ΓΒΌΓΒ΅Γ‘\82ок @var{ns} ΓΒΈ ΓΒ½ΓΒ°Γ‘\87алÑ\8cноС ΓΒΏΓΒΎΓΒ»ΓΒΎΓΒΆΓΒ΅ΓΒ½ΓΒΈΓΒ΅ ΓΒΌΓΒ΅Γ‘\82ок @var{org} ΓΒ΄ΓΒ»Γ‘\8f ΓΒΎΓ‘\81и ΓΒ²ΓΒ΄ΓΒΎΓΒ»Γ‘\8c ΓΒ½ΓΒ°ΓΒΏΓ‘\80авлСниÑ\8f @var{dir} (иÑ\81полÑ\8cзÑ\83йÑ\82С 'c' ΓΒ΄ΓΒ»Γ‘\8f ΓΒΌΓΒ΅Γ‘\82ок colorbar). Γ\9fСÑ\80СмСннаÑ\8f @var{d} ΓΒ·ΓΒ°ΓΒ΄ΓΒ°ΓΒ΅Γ‘\82 Γ‘\88аг ΓΒΌΓΒ΅Γ‘\82ок (СÑ\81ли ΓΒΏΓΒΎΓΒ»ΓΒΎΓΒΆΓΒΈΓ‘\82СлÑ\8cна) ΓΒΈΓΒ»ΓΒΈ ΓΒΈΓ‘\85 Γ‘\87иÑ\81ло ΓΒ½ΓΒ° ΓΒΎΓ‘\81и (СÑ\81ли ΓΒΎΓ‘\82Γ‘\80иÑ\86аÑ\82СлÑ\8cна). Γ\9dΓ‘\83лСвоС ΓΒ·ΓΒ½ΓΒ°Γ‘\87СниС ΓΒ·ΓΒ°ΓΒ΄ΓΒ°ΓΒ΅Γ‘\82 ΓΒ°ΓΒ²Γ‘\82омаÑ\82иÑ\87СÑ\81кÑ\83Γ‘\8e Γ‘\80аÑ\81Γ‘\81Γ‘\82ановкÑ\83 ΓΒΌΓΒ΅Γ‘\82ок. Π•сли @var{org}=@code{NAN}, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ @var{Org}.
 @end deftypefn
 
 @deftypefn {MGL command} {} xtick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...]
 @deftypefnx {MGL command} {} ytick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...]
 @deftypefnx {MGL command} {} ztick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...]
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const char *}lbl, @code{bool} add=@code{false})
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const wchar_t *}lbl, @code{bool} add=@code{false})
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const mglData &}val, @code{const char *}lbl, @code{bool} add=@code{false})
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const mglData &}val, @code{const wchar_t *}lbl, @code{bool} add=@code{false})
-@deftypefnx {C function} @code{void} mgl_set_ticks_str (@code{HMGL} gr, @code{char} dir, @code{const char *}lbl, @code{bool} add)
-@deftypefnx {C function} @code{void} mgl_set_ticks_wcs (@code{HMGL} gr, @code{char} dir, @code{const wchar_t *}lbl, @code{bool} add)
-@deftypefnx {C function} @code{void} mgl_set_ticks_val (@code{HMGL} gr, @code{char} dir, @code{HCDT} val, @code{const char *}lbl, @code{bool} add)
-@deftypefnx {C function} @code{void} mgl_set_ticks_valw (@code{HMGL} gr, @code{char} dir, @code{HCDT} val, @code{const wchar_t *}lbl, @code{bool} add)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const char *}lbl, @code{bool} add=@code{false})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const wchar_t *}lbl, @code{bool} add=@code{false})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const mglData &}val, @code{const char *}lbl, @code{bool} add=@code{false})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const mglData &}val, @code{const wchar_t *}lbl, @code{bool} add=@code{false})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_ticks_str (@code{HMGL} gr, @code{char} dir, @code{const char *}lbl, @code{bool} add)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_ticks_wcs (@code{HMGL} gr, @code{char} dir, @code{const wchar_t *}lbl, @code{bool} add)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_ticks_val (@code{HMGL} gr, @code{char} dir, @code{HCDT} val, @code{const char *}lbl, @code{bool} add)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_ticks_valw (@code{HMGL} gr, @code{char} dir, @code{HCDT} val, @code{const wchar_t *}lbl, @code{bool} add)
 @end ifclear
-Π—Π°Π΄Π°Π΅Ρ‚ ΡΠ²Π½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ @var{val} ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ @var{lbl} Π΄Π»Ρ ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Π΄ΠΎΠ»ΡŒ ΠΎΡΠΈ @var{dir}. Π•сли ΠΌΠ°ΡΡΠΈΠ² @var{val} Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ся Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ Ρ€Π°Π²Π½ΠΎΡ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x]. ΠœΠ΅Ρ‚ΠΊΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ся ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ @samp{\n}. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ @code{SetTicks()} Π΄Π»Ρ Π²ΠΎΡΡΡ‚ановлСния Π°Π²Ρ‚оматичСских ΠΌΠ΅Ρ‚ΠΎΠΊ. @sref{Manual ticks sample}
+Π—Π°Π΄Π°Π΅Ρ‚ ΡΠ²Π½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ @var{val} ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ @var{lbl} Π΄Π»Ρ ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Π΄ΠΎΠ»ΡŒ ΠΎΡΠΈ @var{dir}. Π•сли ΠΌΠ°ΡΡΠΈΠ² @var{val} Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ся Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x]. ΠœΠ΅Ρ‚ΠΊΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ся ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ @samp{\n}. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ @code{SetTicks()} Π΄Π»Ρ Π²ΠΎΡΡΡ‚ановлСния Π°Π²Ρ‚оматичСских ΠΌΠ΅Ρ‚ΠΎΠΊ.
 @end deftypefn
 
 @deftypefn {MGL command} {} xtick 'templ'
@@ -624,45 +619,62 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @deftypefnx {MGL command} {} ztick 'templ'
 @deftypefnx {MGL command} {} ctick 'templ'
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetTickTempl (@code{char} dir, @code{const char *}templ)
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetTickTempl (@code{char} dir, @code{const wchar_t *}templ)
-@deftypefnx {C function} @code{void} mgl_set_tick_templ (@code{HMGL} gr, @code{const char *}templ)
-@deftypefnx {C function} @code{void} mgl_set_tick_templw (@code{HMGL} gr, @code{const wchar_t *}templ)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetTickTempl (@code{char} dir, @code{const char *}templ)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetTickTempl (@code{char} dir, @code{const wchar_t *}templ)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_tick_templ (@code{HMGL} gr, @code{const char *}templ)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_tick_templw (@code{HMGL} gr, @code{const wchar_t *}templ)
 @end ifclear
-Π—Π°Π΄Π°Π΅Ρ‚ ΡˆΠ°Π±Π»ΠΎΠ½ @var{templ} Π΄Π»Ρ ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Π΄ΠΎΠ»ΡŒ x-,y-,z-оси ΠΈΠ»ΠΈ colorbar. Π¨Π°Π±Π»ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ TeX. Π•сли @var{templ}=@code{""}, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡˆΠ°Π±Π»ΠΎΠ½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π² ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ ΡΠ»ΡƒΡ‡Π°Π΅ @samp{%.2g}). Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΡˆΠ°Π±Π»ΠΎΠ½Π° Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π°Π²Ρ‚оматичСскоС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π° ΠΌΠ΅Ρ‚ΠΎΠΊ (Π‘ΠΌ. @code{SetTuneTicks()}).
+Π—Π°Π΄Π°Π΅Ρ‚ ΡˆΠ°Π±Π»ΠΎΠ½ @var{templ} Π΄Π»Ρ ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Π΄ΠΎΠ»ΡŒ x-,y-,z-оси ΠΈΠ»ΠΈ colorbar. Π¨Π°Π±Π»ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ TeX. Π•сли @var{templ}=@code{""}, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡˆΠ°Π±Π»ΠΎΠ½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π² ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ ΡΠ»ΡƒΡ‡Π°Π΅ @samp{%.2g}). Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΡˆΠ°Π±Π»ΠΎΠ½Π° Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π°Π²Ρ‚оматичСскоС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π° ΠΌΠ΅Ρ‚ΠΎΠΊ.
 @end deftypefn
 
-@deftypefn {MGL command} {} xtick val 'templ'
-@deftypefnx {MGL command} {} ytick val 'templ'
-@deftypefnx {MGL command} {} ztick val 'templ'
-@deftypefnx {MGL command} {} ctick val 'templ'
+@deftypefn {MGL command} {} ticktime 'dir' [@code{dv} 'tmpl']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetTickTime (@code{char} dir, @code{float} val, @code{const char *}templ)
-@deftypefnx {C function} @code{void} mgl_set_tick_time (@code{HMGL} gr, @code{float} val, @code{const char *}templ)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetTicksTime (@code{char} dir, @code{float} val, @code{const char *}templ)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_ticks_time (@code{HMGL} gr, @code{float} val, @code{const char *}templ)
 @end ifclear
-Π—Π°Π΄Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ ΡˆΠ°Π³ΠΎΠΌ @var{val} ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½ΠΎΠΌ @var{templ} Π΄Π»Ρ ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Π΄ΠΎΠ»ΡŒ x-,y-,z-оси ΠΈΠ»ΠΈ colorbar. Π¨Π°Π±Π»ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ TeX.
+Π—Π°Π΄Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ ΡˆΠ°Π³ΠΎΠΌ @var{val} ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½ΠΎΠΌ @var{templ} Π΄Π»Ρ ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Π΄ΠΎΠ»ΡŒ x-,y-,z-оси ΠΈΠ»ΠΈ colorbar. Π¨Π°Π±Π»ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ TeX. Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΡˆΠ°Π±Π»ΠΎΠ½Π° @var{templ} Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠ°ΠΊ @url{http://www.manpagez.com/man/3/strftime/}. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹: @samp{%X} Π΄Π»Ρ Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚авлСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, @samp{%x} Π΄Π»Ρ Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚авлСния Π΄Π°Ρ‚Ρ‹, @samp{%Y} Π΄Π»Ρ Π³ΠΎΠ΄Π° Ρ Ρ†ΠΈΡ„Ρ€Π°ΠΌΠΈ ΡΡ‚олСтия. Π•сли @var{val}=0 ΠΈ/ΠΈΠ»ΠΈ @var{templ}="", Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Π°Π²Ρ‚оматичСская Ρ€Π°ΡΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈ/ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€ ΡˆΠ°Π±Π»ΠΎΠ½Π°.
 @end deftypefn
 
+@deftypefn {MGL command} {} tuneticks @code{val} [@code{pos=1.15}]
 @ifclear UDAV
-@deftypefn {Method on @code{mglGraph}} @code{void} SetTuneTicks (@code{bool} tune, @code{float} pos=@code{1.15})
-@deftypefnx {C function} @code{void} mgl_tune_ticks (@code{HMGL} gr, @code{bool} tune, @code{float} pos)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetTuneTicks (@code{int} tune, @code{float} pos=@code{1.15})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_tune_ticks (@code{HMGL} gr, @code{int} tune, @code{float} pos)
+@end ifclear
 Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π° ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΎΡΠ΅ΠΉ ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΌΠ½ΠΎΠΆΠΈΡ‚Сля (для ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ…, Ρ‚ΠΈΠΏΠ° 0.001...0.002, ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ…, Ρ‚ΠΈΠΏΠ° 1000...2000, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚) ΠΈΠ»ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (для ΡƒΠ·ΠΊΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Ρ‚ΠΈΠΏΠ° 0.999...1.000). Π’Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ @var{pos} ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΌΠ½ΠΎΠΆΠΈΡ‚Сля Π½Π° ΠΎΡΠΈ: =0 ΠΎΠΊΠΎΠ»ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ, =1 ΠΎΠΊΠΎΠ»ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ.
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{void} SetTickRotate (@code{bool} val)
-@deftypefnx {C function} @code{void} mgl_set_tick_rotate (@code{HMGL} gr, @code{bool} val)
+@ifclear UDAV
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetTickRotate (@code{bool} val)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_tick_rotate (@code{HMGL} gr, @code{bool} val)
 Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠΊ Π΅ΡΠ»ΠΈ ΠΈΡ… Ρ‡ΠΈΡΠ»ΠΎ ΠΈΠ»ΠΈ Π΄Π»ΠΈΠ½Π° ΠΌΠ΅Ρ‚ΠΎΠΊ ΡΠ»ΠΈΡˆΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊΠΈ.
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{void} SetTickSkip (@code{bool} val)
-@deftypefnx {C function} @code{void} mgl_set_tick_skip (@code{HMGL} gr, @code{bool} val)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetTickSkip (@code{bool} val)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_tick_skip (@code{HMGL} gr, @code{bool} val)
 Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊ ΠΌΠ΅Ρ‚ΠΎΠΊ Π΅ΡΠ»ΠΈ ΠΈΡ… Ρ‡ΠΈΡΠ»ΠΎ ΠΈΠ»ΠΈ Π΄Π»ΠΈΠ½Π° ΠΌΠ΅Ρ‚ΠΎΠΊ ΡΠ»ΠΈΡˆΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊΠΈ.
 @end deftypefn
 @end ifclear
 
 
+@anchor{ticklen}
+@deftypefn {MGL command} {} ticklen @code{val} [@code{stt=1}]
+@ifclear UDAV
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetTickLen (@code{float} val, @code{float} stt=@code{1})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_tick_len (@code{HMGL} gr, @code{float} val, @code{float} stt)
+@end ifclear
+Π—Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ @code{0.1}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{stt}>0 Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ ΠΏΠΎΠ΄ΠΌΠ΅Ρ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² @code{sqrt(1+stt)} Ρ€Π°Π· ΠΌΠ΅Π½ΡŒΡˆΠ΅.
+@end deftypefn
+
+@deftypefn {MGL command} {} axisstl 'stl' ['tck'='' 'sub'='']
+@ifclear UDAV
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetAxisStl (@code{const char *}stl=@code{"k"}, @code{const char *}tck=@code{0}, @code{const char *}sub=@code{0})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_axis_stl (@code{HMGL} gr, @code{const char *}stl, @code{const char *}tck, @code{const char *}sub)
+@end ifclear
+Π—Π°Π΄Π°Π΅Ρ‚ ΡΡ‚ΠΈΠ»ΡŒ ΠΎΡΠ΅ΠΉ (@var{stl}), ΠΌΠ΅Ρ‚ΠΎΠΊ (@var{tck}) ΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Ρ‚ΠΎΠΊ (@var{sub}) ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π•сли @var{stl} ΠΏΡƒΡΡ‚ая ΠΈΠ»ΠΈ Π½ΠΎΠ»ΡŒ, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΡ‚ΠΈΠ»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@samp{k} ΠΈΠ»ΠΈ @samp{w} Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΠΈ). Π•сли  @var{tck}, @var{sub} ΠΏΡƒΡΡ‚ая ΠΈΠ»ΠΈ Π½ΠΎΠ»ΡŒ, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΡ‚ΠΈΠ»ΡŒ ΠΎΡΠ΅ΠΉ (Ρ‚.Π΅. @var{stl}).
+@end deftypefn
+
 @c ##################################################################
-@node Transformation matrix, Export picture, Axis settings, MathGL core
+@node Subplots and rotation, Export picture, Axis settings, MathGL core
 @section ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ
 @cindex Aspect
 @cindex Rotate
@@ -678,30 +690,23 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @cindex Push
 @cindex Pop
 
-Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ Π³Π΄Π΅ ΠΈ ΠΊΠ°ΠΊ Π³Ρ€Π°Ρ„ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½. Π‘ущСствуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ€ΡΠ΄ΠΎΠΊ Π²Ρ‹Π·ΠΎΠ²Π° ΡΡ‚ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄Π»Ρ Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ Π²ΠΈΠ΄Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π’Π½Π°Ρ‡Π°Π»Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SubPlot() ΠΈΠ»ΠΈ InPlot() Π΄Π»Ρ ΡƒΠΊΠ°Π·Π°Π½ΠΈΡ ΠΌΠ΅ΡΡ‚ополоТСния Π²Ρ‹Π²ΠΎΠ΄Π°. ΠŸΠΎΡΠ»Π΅ Π½ΠΈΡ… -- Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ Rotate() ΠΈ ΡΠΆΠ°Ρ‚ия Aspect(). Π˜ Π½Π°ΠΊΠΎΠ½Π΅Ρ† Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π»Ρ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π’мСсто Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ColumnPlot() Π΄Π»Ρ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² Π² ΡΡ‚ΠΎΠ»Π±Π΅Ρ† ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π°Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π±Π΅Π· Π·Π°Π·ΠΎΡ€Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡΡΠΌΠΈ.
+Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ Π³Π΄Π΅ ΠΈ ΠΊΠ°ΠΊ Π³Ρ€Π°Ρ„ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½. Π‘ущСствуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ€ΡΠ΄ΠΎΠΊ Π²Ρ‹Π·ΠΎΠ²Π° ΡΡ‚ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄Π»Ρ Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ Π²ΠΈΠ΄Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π’Π½Π°Ρ‡Π°Π»Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SubPlot() ΠΈΠ»ΠΈ InPlot() Π΄Π»Ρ ΡƒΠΊΠ°Π·Π°Π½ΠΈΡ ΠΌΠ΅ΡΡ‚ополоТСния Π²Ρ‹Π²ΠΎΠ΄Π°. ΠŸΠΎΡΠ»Π΅ Π½ΠΈΡ… -- Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ Rotate() ΠΈ ΡΠΆΠ°Ρ‚ия Aspect(). Π˜ Π½Π°ΠΊΠΎΠ½Π΅Ρ† Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π»Ρ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π’мСсто Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ColumnPlot() Π΄Π»Ρ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² Π² ΡΡ‚ΠΎΠ»Π±Π΅Ρ† ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π°Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π±Π΅Π· Π·Π°Π·ΠΎΡ€Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡΡΠΌΠΈ. @sref{Subplots}
 
 @anchor{subplot}
-@deftypefn {MGL command} {} subplot @code{nx ny m [dx=0 dy=0]}
-@ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SubPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{float} dx=@code{0}, @code{float} dy=@code{0})
-@deftypefnx {C function} @code{void} mgl_subplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m)
-@deftypefnx {C function} @code{void} mgl_subplot_d (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{float} dx, @code{float} dy)
-@end ifclear
-ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² @var{m}-ΡƒΡŽ ΡΡ‡Π΅ΠΉΠΊΡƒ ΡΠ΅Ρ‚ΠΊΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ @var{nx}*@var{ny} ΠΎΡ‚ Π²ΡΠ΅Π³ΠΎ Ρ€ΠΈΡΡƒΠ½ΠΊΠ°. Π€ΡƒΠ½ΠΊΡ†ΠΈΡ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Π΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ‚рансформации (ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Ρ‹ ΠΈ ΡΠΆΠ°Ρ‚ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°) ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ "ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„ΠΈΠΊΠ°". Π‘ ΡΡΡ‚СтичСской Ρ‚ΠΎΡ‡ΠΊΠΈ Π·Ρ€Π΅Π½ΠΈΡ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΡΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ (ΠΈΠ»ΠΈ Π½Π΅ ΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ) Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ ΡΠ΅Ρ‚ΠΊΠΈ. Π―Ρ‡Π΅ΠΉΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ @var{dx}, @var{dy}.
-@end deftypefn
-
-@deftypefn {MGL command} {} subplot @code{nx ny m} 'style'
+@deftypefn {MGL command} {} subplot @code{nx ny m ['stl'='<>_^' dx=0 dy=0]}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SubPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{const char *}style)
-@deftypefnx {C function} @code{void} mgl_subplot_s (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}style)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SubPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{const char *}stl=@code{"<>_^"}, @code{float} dx=@code{0}, @code{float} dy=@code{0})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_subplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}stl)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_subplot_d (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}stl, @code{float} dx, @code{float} dy)
 @end ifclear
-Ð\90налогиÑ\87но ΓΒΏΓ‘\80СдÑ\8bдÑ\83Γ‘\89СмÑ\83, ΓΒ½ΓΒΎ ΓΒΌΓΒ΅Γ‘\81Γ‘\82о ΓΒ΄ΓΒ»Γ‘\8f ΓΒΎΓ‘\81Сй/colorbar Γ‘\80СзСÑ\80виÑ\80Γ‘\83СÑ\82Γ‘\81Γ‘\8f Γ‘\82олÑ\8cко ΓΒ΅Γ‘\81ли Γ‘\81Γ‘\82Γ‘\80ока @var{style} Γ‘\81одСÑ\80ТиÑ\82: @samp{L} ΓΒΈΓΒ»ΓΒΈ @samp{<} -- Γ‘\81 ΓΒ»ΓΒ΅ΓΒ²ΓΒΎΓΒ³ΓΒΎ ΓΒΊΓ‘\80аÑ\8f, @samp{R} ΓΒΈΓΒ»ΓΒΈ @samp{>} -- Γ‘\81 ΓΒΏΓ‘\80авого ΓΒΊΓ‘\80аÑ\8f, @samp{A} ΓΒΈΓΒ»ΓΒΈ @samp{^} -- Γ‘\81 ΓΒ²ΓΒ΅Γ‘\80Γ‘\85нСго ΓΒΊΓ‘\80аÑ\8f, @samp{U} ΓΒΈΓΒ»ΓΒΈ @samp{_} -- Γ‘\81 ΓΒ½ΓΒΈΓΒΆΓΒ½ΓΒ΅ΓΒ³ΓΒΎ ΓΒΊΓ‘\80аÑ\8f.
+Ð\9fомСÑ\89аСÑ\82 ΓΒΏΓΒΎΓ‘\81лСдÑ\83Γ‘\8eΓ‘\89ий ΓΒ²Γ‘\8bвод ΓΒ² @var{m}-Γ‘\83Γ‘\8e Γ‘\8fΓ‘\87СйкÑ\83 Γ‘\81СÑ\82ки Γ‘\80азмСÑ\80ом @var{nx}*@var{ny} ΓΒΎΓ‘\82 ΓΒ²Γ‘\81Сго Γ‘\80иÑ\81Γ‘\83нка. ΓΒ€Γ‘\83нкÑ\86иÑ\8f Γ‘\81бÑ\80аÑ\81Γ‘\8bваСÑ\82 ΓΒΌΓΒ°Γ‘\82Γ‘\80иÑ\86Γ‘\83 Γ‘\82Γ‘\80анÑ\81Γ‘\84оÑ\80маÑ\86ии (повоÑ\80оÑ\82Γ‘\8b ΓΒΈ Γ‘\81ТаÑ\82иС ΓΒ³Γ‘\80аÑ\84ика) ΓΒΈ ΓΒ΄ΓΒΎΓΒ»ΓΒΆΓΒ½ΓΒ° ΓΒ²Γ‘\8bзÑ\8bваÑ\82Γ‘\8cΓ‘\81Γ‘\8f ΓΒΏΓΒ΅Γ‘\80вой ΓΒ΄ΓΒ»Γ‘\8f Γ‘\81озданиÑ\8f "подгÑ\80аÑ\84ика". ΓΒ‘ Γ‘\8dΓ‘\81Γ‘\82СÑ\82иÑ\87СÑ\81кой Γ‘\82оÑ\87ки ΓΒ·Γ‘\80СниÑ\8f ΓΒ½ΓΒ΅ Γ‘\80СкомСндÑ\83СÑ\82Γ‘\81Γ‘\8f ΓΒ²Γ‘\8bзÑ\8bваÑ\82Γ‘\8c Γ‘\8dΓ‘\82Γ‘\83 Γ‘\84Γ‘\83нкÑ\86иÑ\8e Γ‘\81 Γ‘\80азлиÑ\87нÑ\8bми (или ΓΒ½ΓΒ΅ ΓΒΊΓ‘\80аÑ\82нÑ\8bми) Γ‘\80азмСÑ\80ами Γ‘\81СÑ\82ки. Γ\9cСÑ\81Γ‘\82о ΓΒ΄ΓΒ»Γ‘\8f ΓΒΎΓ‘\81Сй/colorbar Γ‘\80СзСÑ\80виÑ\80Γ‘\83СÑ\82Γ‘\81Γ‘\8f Γ‘\82олÑ\8cко ΓΒ΅Γ‘\81ли Γ‘\81Γ‘\82Γ‘\80ока @var{style} Γ‘\81одСÑ\80ТиÑ\82: @samp{L} ΓΒΈΓΒ»ΓΒΈ @samp{<} -- Γ‘\81 ΓΒ»ΓΒ΅ΓΒ²ΓΒΎΓΒ³ΓΒΎ ΓΒΊΓ‘\80аÑ\8f, @samp{R} ΓΒΈΓΒ»ΓΒΈ @samp{>} -- Γ‘\81 ΓΒΏΓ‘\80авого ΓΒΊΓ‘\80аÑ\8f, @samp{A} ΓΒΈΓΒ»ΓΒΈ @samp{^} -- Γ‘\81 ΓΒ²ΓΒ΅Γ‘\80Γ‘\85нСго ΓΒΊΓ‘\80аÑ\8f, @samp{U} ΓΒΈΓΒ»ΓΒΈ @samp{_} -- Γ‘\81 ΓΒ½ΓΒΈΓΒΆΓΒ½ΓΒ΅ΓΒ³ΓΒΎ ΓΒΊΓ‘\80аÑ\8f. ΓΒ―Γ‘\87Сйка ΓΒΌΓΒΎΓΒΆΓΒ΅Γ‘\82 ΓΒ±Γ‘\8bΓ‘\82Γ‘\8c ΓΒ΄ΓΒΎΓΒΏΓΒΎΓΒ»ΓΒ½ΓΒΈΓ‘\82СлÑ\8cно Γ‘\81двинÑ\83Γ‘\82а ΓΒΎΓ‘\82ноÑ\81иÑ\82СлÑ\8cно Γ‘\81воСго ΓΒΎΓΒ±Γ‘\8bΓ‘\87ного ΓΒΏΓΒΎΓΒ»ΓΒΎΓΒΆΓΒ΅ΓΒ½ΓΒΈΓ‘\8f ΓΒ½ΓΒ° ΓΒΎΓ‘\82ноÑ\81иÑ\82СлÑ\8cнÑ\8bй Γ‘\80азмСÑ\80 @var{dx}, @var{dy}.
 @end deftypefn
 
+@anchor{multiplot}
 @deftypefn {MGL command} {} multiplot @code{nx ny m dx dy} ['style'='<>_^']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} MultiPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{int} dx, @code{int} dy, @code{const char *}style=@code{"<>_^"})
-@deftypefnx {C function} @code{void} mgl_multiplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{int} dx, @code{int} dy, @code{const char *}style)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} MultiPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{int} dx, @code{int} dy, @code{const char *}stl=@code{"<>_^"})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_multiplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{int} dx, @code{int} dy, @code{const char *}stl)
 @end ifclear
 ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΈΠ· @var{dx}*@var{dy} ΡΡ‡Π΅Π΅ΠΊ, Π½Π°Ρ‡ΠΈΠ½Π°Ρ Ρ @var{m}-ΠΎΠΉ ΡΡ‡Π΅ΠΉΠΊΠΈ, ΡΠ΅Ρ‚ΠΊΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ @var{nx}*@var{ny} ΠΎΡ‚ Π²ΡΠ΅Π³ΠΎ Ρ€ΠΈΡΡƒΠ½ΠΊΠ°. Π€ΡƒΠ½ΠΊΡ†ΠΈΡ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Π΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ‚рансформации (ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Ρ‹ ΠΈ ΡΠΆΠ°Ρ‚ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°) ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ "ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„ΠΈΠΊΠ°". ΠœΠ΅ΡΡ‚ΠΎ Π΄Π»Ρ ΠΎΡΠ΅ΠΉ/colorbar Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ся Π΅ΡΠ»ΠΈ ΡΡ‚Ρ€ΠΎΠΊΠ° @var{style} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚: @samp{L} ΠΈΠ»ΠΈ @samp{<} -- Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΊΡ€Π°Ρ, @samp{R} ΠΈΠ»ΠΈ @samp{>} -- Ρ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΠΊΡ€Π°Ρ, @samp{A} ΠΈΠ»ΠΈ @samp{^} -- Ρ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΊΡ€Π°Ρ, @samp{U} ΠΈΠ»ΠΈ @samp{_} -- Ρ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΊΡ€Π°Ρ.
 @end deftypefn
@@ -709,40 +714,50 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @anchor{inplot}
 @deftypefn {MGL command} {} inplot @code{x1 x2 y1 y2 [rel=off]}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} InPlot (@code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{bool} rel=@code{false})
-@deftypefnx {C function} @code{void} mgl_inplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2)
-@deftypefnx {C function} @code{void} mgl_relplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} InPlot (@code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{bool} rel=@code{false})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_inplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_relplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2)
 @end ifclear
-ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}] (исходный Ρ€Π°Π·ΠΌΠ΅Ρ€ [0,1]*[0,1]). Π­Ρ‚Π° Ρ„ункция ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Ρ€ΠΈΡΡƒΠ½ΠΊΠ°. Π•сли ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{rel}=@code{true}, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎΠ·ΠΈΡ†ΠΈΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡ‰Π΅Π³ΠΎ SubPlot() (ΠΈΠ»ΠΈ InPlot() Ρ @var{rel}=@code{false}). Π€ΡƒΠ½ΠΊΡ†ΠΈΡ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Π΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ‚рансформации (ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Ρ‹ ΠΈ ΡΠΆΠ°Ρ‚ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°) ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ "ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„ΠΈΠΊΠ°".
+Ð\9fомСÑ\89аСÑ\82 ΓΒΏΓΒΎΓ‘\81лСдÑ\83Γ‘\8eΓ‘\89ий ΓΒ²Γ‘\8bвод ΓΒ² ΓΒΏΓ‘\80Γ‘\8fмоÑ\83голÑ\8cнÑ\83Γ‘\8e ΓΒΎΓΒ±ΓΒ»ΓΒ°Γ‘\81Γ‘\82Γ‘\8c [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}] (иÑ\81Γ‘\85однÑ\8bй Γ‘\80азмСÑ\80 [0,1]*[0,1]). ΓΒ­Γ‘\82а Γ‘\84Γ‘\83нкÑ\86иÑ\8f ΓΒΏΓΒΎΓΒ·ΓΒ²ΓΒΎΓΒ»Γ‘\8fСÑ\82 ΓΒΏΓΒΎΓΒΌΓΒ΅Γ‘\81Γ‘\82иÑ\82Γ‘\8c ΓΒ³Γ‘\80аÑ\84ик ΓΒ² ΓΒΏΓ‘\80оизволÑ\8cнÑ\83Γ‘\8e ΓΒΎΓΒ±ΓΒ»ΓΒ°Γ‘\81Γ‘\82Γ‘\8c Γ‘\80иÑ\81Γ‘\83нка. Γ\95Γ‘\81ли ΓΒΏΓΒ°Γ‘\80амСÑ\82Γ‘\80 @var{rel}=@code{true}, Γ‘\82о ΓΒΈΓ‘\81полÑ\8cзÑ\83СÑ\82Γ‘\81Γ‘\8f ΓΒΏΓΒΎΓΒ·ΓΒΈΓ‘\86иÑ\8f ΓΒΎΓ‘\82ноÑ\81иÑ\82СлÑ\8cно Γ‘\82СкÑ\83Γ‘\89Сго SubPlot() (или InPlot() Γ‘\81 @var{rel}=@code{false}). ΓΒ€Γ‘\83нкÑ\86иÑ\8f Γ‘\81бÑ\80аÑ\81Γ‘\8bваСÑ\82 ΓΒΌΓΒ°Γ‘\82Γ‘\80иÑ\86Γ‘\83 Γ‘\82Γ‘\80анÑ\81Γ‘\84оÑ\80маÑ\86ии (повоÑ\80оÑ\82Γ‘\8b ΓΒΈ Γ‘\81ТаÑ\82иС ΓΒ³Γ‘\80аÑ\84ика) ΓΒΈ ΓΒ΄ΓΒΎΓΒ»ΓΒΆΓΒ½ΓΒ° ΓΒ²Γ‘\8bзÑ\8bваÑ\82Γ‘\8cΓ‘\81Γ‘\8f ΓΒΏΓΒ΅Γ‘\80вой ΓΒ΄ΓΒ»Γ‘\8f Γ‘\81озданиÑ\8f "подгÑ\80аÑ\84ика".
 @end deftypefn
 
 @anchor{columnplot}
 @deftypefn {MGL command} {} columnplot @code{num ind [d=0]}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} ColumnPlot (@code{int} num, @code{int} ind, @code{float} d=@code{0})
-@deftypefnx {C function} @code{void} mgl_columnplot (@code{HMGL} gr, @code{int} num, @code{int} ind)
-@deftypefnx {C function} @code{void} mgl_columnplot_d (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{float} d)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} ColumnPlot (@code{int} num, @code{int} ind, @code{float} d=@code{0})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_columnplot (@code{HMGL} gr, @code{int} num, @code{int} ind)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_columnplot_d (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{float} d)
+@end ifclear
+ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² @var{ind}-ΡƒΡŽ ΡΡ‚Ρ€ΠΎΠΊΡƒ ΡΡ‚ΠΎΠ»Π±Ρ†Π° ΠΈΠ· @var{num} ΡΡ‚Ρ€ΠΎΠΊ. ΠŸΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡ‚ΠΎΠ»Π±Ρ†Π° Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° SubPlot() (ΠΈΠ»ΠΈ InPlot() Ρ @var{rel}=@code{false}). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{d} Π·Π°Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π·ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΡ‚Ρ€ΠΎΠΊ.
+@end deftypefn
+
+@anchor{gridplot}
+@deftypefn {MGL command} {} gridplot @code{nx ny ind [d=0]}
+@ifclear UDAV
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} GridPlot (@code{int} nx, @code{int} ny, @code{int} ind, @code{float} d=@code{0})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_gridplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} ind)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_gridplot_d (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} ind, @code{float} d)
 @end ifclear
-Ð\9fомСÑ\89аСÑ\82 ΓΒΏΓΒΎΓ‘\81лСдÑ\83Γ‘\8eΓ‘\89ий ΓΒ²Γ‘\8bвод ΓΒ² @var{ind}-Γ‘\83Γ‘\8e Γ‘\81Γ‘\82Γ‘\80окÑ\83 Γ‘\81Γ‘\82олбÑ\86а ΓΒΈΓΒ· @var{num} Γ‘\81Γ‘\82Γ‘\80ок. Γ\9fолоТСниС Γ‘\81Γ‘\82олбÑ\86а ΓΒ²Γ‘\8bбиÑ\80аСÑ\82Γ‘\81Γ‘\8f ΓΒΎΓ‘\82ноÑ\81иÑ\82СлÑ\8cно ΓΒΏΓΒΎΓ‘\81лСднСго ΓΒ²Γ‘\8bзова SubPlot() (или InPlot() Γ‘\81 @var{rel}=@code{false}). Γ\9fаÑ\80амСÑ\82Γ‘\80 @var{d} ΓΒ·ΓΒ°ΓΒ΄ΓΒ°ΓΒ΅Γ‘\82 ΓΒ΄ΓΒΎΓΒΏΓΒΎΓΒ»ΓΒ½ΓΒΈΓ‘\82СлÑ\8cнÑ\8bй ΓΒ·ΓΒ°ΓΒ·ΓΒΎΓ‘\80 ΓΒΌΓΒ΅ΓΒΆΓΒ΄Γ‘\83 Γ‘\81Γ‘\82Γ‘\80ок. @sref{ColumnPlot sample}
+Ð\9fомСÑ\89аСÑ\82 ΓΒΏΓΒΎΓ‘\81лСдÑ\83Γ‘\8eΓ‘\89ий ΓΒ²Γ‘\8bвод ΓΒ² @var{ind}-Γ‘\83Γ‘\8e Γ‘\8fΓ‘\87СйкÑ\83 Γ‘\82аблиÑ\86Γ‘\8b @var{nx}*@var{ny}. Γ\9fолоТСниС Γ‘\8fΓ‘\87Сйки ΓΒ²Γ‘\8bбиÑ\80аСÑ\82Γ‘\81Γ‘\8f ΓΒΎΓ‘\82ноÑ\81иÑ\82СлÑ\8cно ΓΒΏΓΒΎΓ‘\81лСднСго ΓΒ²Γ‘\8bзова SubPlot() (или InPlot() Γ‘\81 @var{rel}=@code{false}). Γ\9fаÑ\80амСÑ\82Γ‘\80 @var{d} ΓΒ·ΓΒ°ΓΒ΄ΓΒ°ΓΒ΅Γ‘\82 ΓΒ΄ΓΒΎΓΒΏΓΒΎΓΒ»ΓΒ½ΓΒΈΓ‘\82СлÑ\8cнÑ\8bй ΓΒ·ΓΒ°ΓΒ·ΓΒΎΓ‘\80 ΓΒΌΓΒ΅ΓΒΆΓΒ΄Γ‘\83 Γ‘\81Γ‘\82Γ‘\80ок.
 @end deftypefn
 
 @anchor{stickplot}
 @deftypefn {MGL command} {} stickplot @code{num ind tet phi}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} StickPlot (@code{int} num, @code{int} ind, @code{float} tet, @code{float} phi)
-@deftypefnx {C function} @code{void} mgl_stickplot (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{float} tet, @code{float} phi)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} StickPlot (@code{int} num, @code{int} ind, @code{float} tet, @code{float} phi)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_stickplot (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{float} tet, @code{float} phi)
 @end ifclear
-ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² @var{ind}-ΡƒΡŽ ΡΡ‡Π΅ΠΉΠΊΡƒ "бруска" ΠΈΠ· @var{num} ΡΡ‡Π΅Π΅ΠΊ. ΠŸΡ€ΠΈ ΡΡ‚ΠΎΠΌ ΡΠ°ΠΌ Π±Ρ€ΡƒΡΠΎΠΊ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ Π½Π° ΡƒΠ³Π»Ρ‹ @var{tet}, @var{phi}. ΠŸΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° SubPlot() (ΠΈΠ»ΠΈ InPlot() Ρ @var{rel}=@code{false}). @sref{StickPlot sample}
+ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² @var{ind}-ΡƒΡŽ ΡΡ‡Π΅ΠΉΠΊΡƒ "бруска" ΠΈΠ· @var{num} ΡΡ‡Π΅Π΅ΠΊ. ΠŸΡ€ΠΈ ΡΡ‚ΠΎΠΌ ΡΠ°ΠΌ Π±Ρ€ΡƒΡΠΎΠΊ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ Π½Π° ΡƒΠ³Π»Ρ‹ @var{tet}, @var{phi}. ΠŸΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° SubPlot() (ΠΈΠ»ΠΈ InPlot() Ρ @var{rel}=@code{false}).
 @end deftypefn
 
 
 @anchor{title}
-@deftypefn {MGL command} {} title 'txt' ['stl'='#' @code{size=-2}]
+@deftypefn {MGL command} {} title 'title' ['stl'='' @code{size=-2}]
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Title (@code{const char *}txt, @code{const char *}stl=@code{"#"}, @code{float} size=@code{-2})
-@deftypefnx {Method on @code{mglGraph}} @code{void} Title (@code{const wchar_t *}txt, @code{const char *}stl=@code{"#"}, @code{float} size=@code{-2})
-@deftypefnx {C function} @code{void} mgl_title(@code{HMGL} gr, @code{const char *}txt, @code{const char *}stl, @code{float} size)
-@deftypefnx {C function} @code{void} mgl_titlew (@code{HMGL} gr, @code{const wchar_t *}txt, @code{const char *}stl, @code{float} size)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Title (@code{const char *}txt, @code{const char *}stl=@code{""}, @code{float} size=@code{-2})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Title (@code{const wchar_t *}txt, @code{const char *}stl=@code{""}, @code{float} size=@code{-2})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_title (@code{HMGL} gr, @code{const char *}txt, @code{const char *}stl, @code{float} size)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_titlew (@code{HMGL} gr, @code{const wchar_t *}txt, @code{const char *}stl, @code{float} size)
 @end ifclear
 Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ @var{title} Π΄Π»Ρ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ "ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„ΠΈΠΊΠ°" ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ @var{stl} Ρ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ @var{size}. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° @var{stl} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΠΎΠ±Ρ€Π°ΠΌΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ. Π€ΡƒΠ½ΠΊΡ†ΠΈΡ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Π΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ‚рансформации (ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Ρ‹ ΠΈ ΡΠΆΠ°Ρ‚ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°) ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΡΡ€Π°Π·Ρƒ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ "ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„ΠΈΠΊΠ°".
 @end deftypefn
@@ -750,16 +765,16 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @anchor{rotate}
 @deftypefn {MGL command} {} rotate @code{tetz tetx [tety=0]}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Rotate (@code{float} TetX, @code{float} TetZ, @code{float} TetY=@code{0})
-@deftypefnx {C function} @code{void} mgl_rotate (@code{HMGL} gr, @code{float} TetX, @code{float} TetZ, @code{float} TetY)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Rotate (@code{float} TetX, @code{float} TetZ, @code{float} TetY=@code{0})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_rotate (@code{HMGL} gr, @code{float} TetX, @code{float} TetZ, @code{float} TetY)
 @end ifclear
 Π’Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΈΡΡ‚Π΅ΠΌΡƒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡΠ΅ΠΉ @{x, z, y@} ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° ΡƒΠ³Π»Ρ‹ @var{TetX}, @var{TetZ}, @var{TetY}.
 @end deftypefn
 
 @deftypefn {MGL command} {} rotate @code{tet x y z}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} RotateN (@code{float} Tet, @code{float} x, @code{float} y, @code{float} z)
-@deftypefnx {C function} @code{void} mgl_rotate_vector (@code{HMGL} gr, @code{float Tet}, @code{float x}, @code{float y}, @code{float z})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} RotateN (@code{float} Tet, @code{float} x, @code{float} y, @code{float} z)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_rotate_vector (@code{HMGL} gr, @code{float Tet}, @code{float x}, @code{float y}, @code{float z})
 @end ifclear
 Π’Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΈΡΡ‚Π΅ΠΌΡƒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° @{@var{x}, @var{y}, @var{z}@} Π½Π° ΡƒΠ³ΠΎΠ» @var{Tet}.
 @end deftypefn
@@ -767,8 +782,8 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @anchor{aspect}
 @deftypefn {MGL command} {} aspect @code{ax ay [az=1]}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Aspect (@code{float} Ax, @code{float} Ay, @code{float} Az)
-@deftypefnx {C function} @code{void} mgl_aspect (@code{HMGL} gr, @code{float} Ax, @code{float} Ay, @code{float} Az)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Aspect (@code{float} Ax, @code{float} Ay, @code{float} Az=@code{1})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_aspect (@code{HMGL} gr, @code{float} Ax, @code{float} Ay, @code{float} Az)
 @end ifclear
 Π£ΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΡΠ΅ΠΉ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ @var{Ax:Ay:Az}. Π”ля Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ Π²ΠΈΠ΄Π° ΡΠ»Π΅Π΄ΡƒΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Rotate().
 @end deftypefn
@@ -776,32 +791,46 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @anchor{perspective}
 @deftypefn {MGL command} {} perspective @code{val}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Perspective (@code{float} a)
-@deftypefnx {C function} @code{void} mgl_perspective (@code{HMGL} gr, @code{float} a)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Perspective (@code{float} a)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_perspective (@code{HMGL} gr, @code{float} a)
 @end ifclear
 Π”обавляСт (Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚) ΠΏΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Ρƒ Π΄Π»Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @math{a ~ 1/z_@{eff@} \in [0,1)}. ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{a=0}) ΠΏΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Π° ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π°.
 @end deftypefn
 
 @ifclear UDAV
-@deftypefn {Method on @code{mglGraph}} @code{void} View (@code{float} TetX, @code{float} TetZ, @code{float} TetY=@code{0})
-@deftypefnx {C function} @code{void} mgl_view (@code{HMGL} gr, @code{float} TetX, @code{float} TetZ, @code{float} TetY)
-Π’Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΈΡΡ‚Π΅ΠΌΡƒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡΠ΅ΠΉ @{x, z, y@} ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° ΡƒΠ³Π»Ρ‹ @var{TetX}, @var{TetZ}, @var{TetY}. Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ‚ @code{Rotate()}.
-@end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{void} Push ()
-@deftypefnx {C function} @code{void} mgl_mat_push (@code{HMGL} gr)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Push ()
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_mat_push (@code{HMGL} gr)
 ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΡ‚Π΅ΠΊ. ΠŸΠΎΠ·Π΄Π½Π΅Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΡΠΎΡΡ‚ояниС Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Pop(). Π‘Ρ‚Π΅ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎ 10 ΠΌΠ°Ρ‚Ρ€ΠΈΡ†.
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{void} Pop ()
-@deftypefnx {C function} @code{void} mgl_mat_pop (@code{HMGL} gr)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Pop ()
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_mat_pop (@code{HMGL} gr)
 Π—амСняСт (восстанавливаСт) ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡŽΡŽ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½ΡƒΡŽ Π² ΡΡ‚Π΅ΠΊ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ.
 @end deftypefn
+
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetPlotFactor (@code{float} val)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_plotfactor (@code{HMGL} gr, @code{float} val)
+Π—Π°Π΄Π°Π΅Ρ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π± ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ. ΠΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ ΠΌΠ΅Π½ΡŒΡˆΠ΅ 1.5. Π­Ρ‚ΠΎ Π°Π½Π°Π»ΠΎΠ³ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Zoom(), Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π½ΠΎΠ»ΡŒ Π΄Π»Ρ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π°Π²Ρ‚оматичСского ΠΌΠ°ΡΡˆΡ‚абирования.
+@end deftypefn
+
+Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ 2 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ @code{Zoom()} ΠΈ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ @code{View()} Π²ΡΠ΅Π³ΠΎ Ρ€ΠΈΡΡƒΠ½ΠΊΠ°. Π’.Π΅. ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Ρ‚рансформации. ΠžΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π΄Π»Ρ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ/приблиТСния Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡ‹ΡˆΠΈ.
+
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} View (@code{float} TetX, @code{float} TetZ, @code{float} TetY=@code{0})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_view (@code{HMGL} gr, @code{float} TetX, @code{float} TetZ, @code{float} TetY)
+Π’Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΈΡΡ‚Π΅ΠΌΡƒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡΠ΅ΠΉ @{x, z, y@} ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° ΡƒΠ³Π»Ρ‹ @var{TetX}, @var{TetZ}, @var{TetY}. Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ‚ @code{Rotate()}.
+@end deftypefn
+
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Zoom (@code{float} x1, @code{float} y1, @code{float} x2, @code{float} y2)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_zoom (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} x2, @code{float} y2)
+ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Π΅ΡΡŒ Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ. ΠŸΠΎΡΠ»Π΅ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡ΠΈΡ‰Π΅Π½ ΠΈ Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ [x1,x2]*[y1,y2] ΠΎΡ‚ ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€ΠΈΡΡƒΠ½ΠΊΠ°. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @var{x1}, @var{x2}, @var{y1}, @var{y2} ΠΌΠ΅Π½ΡΡŽΡ‚ся Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 1. Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! ΡΡ‚ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΉΠΊΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Π½Ρ‹ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ„ункциями. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ @code{Zoom(0,0,1,1)} Π΄Π»Ρ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² ΠΌΠ°ΡΡˆΡ‚Π°Π± ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
+@end deftypefn
+
 @end ifclear
 
 
 @c ##################################################################
-@node Export picture, Primitives drawing, Transformation matrix, MathGL core
+@node Export picture, Primitives, Subplots and rotation, MathGL core
 @section Π­ΠΊΡΠΏΠΎΡ€Ρ‚ Ρ€ΠΈΡΡƒΠ½ΠΊΠ°
 @cindex SetSize
 
@@ -810,8 +839,8 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @anchor{setsize}
 @deftypefn {MGL command} {} setsize @code{w h}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetSize (@code{int} width, @code{int} height)
-@deftypefnx {C function} @code{void} mgl_set_size (@code{HMGL} gr, @code{int} width, @code{int} height)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetSize (@code{int} width, @code{int} height)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_size (@code{HMGL} gr, @code{int} width, @code{int} height)
 @end ifclear
 Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ…. Π€ΡƒΠ½ΠΊΡ†ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ @strong{ΠΏΠ΅Ρ€Π΅Π΄} Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ„ункциями ΠΏΠΎΡΡ‚роСния ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Ρ€ΠΈΡΡƒΠ½ΠΊΠ°.
 @end deftypefn
@@ -819,20 +848,20 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @anchor{quality}
 @deftypefn {MGL command} {} quality @code{val}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetQuality (@code{int} val=@code{MGL_DRAW_NORM})
-@deftypefnx {C function} @code{void} mgl_set_quality (@code{HMGL} gr, @code{int} val)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetQuality (@code{int} val=@code{MGL_DRAW_NORM})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_quality (@code{HMGL} gr, @code{int} val)
 @end ifclear
 Π—Π°Π΄Π°Π΅Ρ‚ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{val}: @code{MGL_DRAW_WIRE=0} -- Π½Π΅Ρ‚ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³Ρ€Π°Π½Π΅ΠΉ (Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Ρ‹ΡΡ‚Ρ€Ρ‹ΠΉ), @code{MGL_DRAW_FAST=1} -- Π½Π΅Ρ‚ ΠΈΠ½Ρ‚Срполяции Ρ†Π²Π΅Ρ‚Π° (быстрый), @code{MGL_DRAW_NORM=2} -- Π²Ρ‹ΡΠΎΠΊΠΎΠ΅ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ (Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ). Π•сли ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ Π±ΠΈΡ‚ @code{MGL_DRAW_LMEM=0x4}, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΡΠΌΠΎΠ΅ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (мСньшС Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ ΠΏΠ°ΠΌΡΡ‚ΠΈ).
 @end deftypefn
 
 @ifclear UDAV
-@deftypefn {Method on @code{mglGraph}} @code{void} StartGroup (const char *name)
-@deftypefnx {C function} @code{void} mgl_start_group (@code{HMGL} gr, @code{const char *}name)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} StartGroup (const char *name)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_start_group (@code{HMGL} gr, @code{const char *}name)
 ΠΠ°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏΡ‹. Π“Ρ€ΡƒΠΏΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏΡ‹. ΠžΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ся Π΄Π»Ρ Π²Ρ‹Π±ΠΎΡ€Π° Ρ‡Π°ΡΡ‚ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠΈ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΠΈ ΠΈ Ρ‚.Π΄.
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{void} EndGroup ()
-@deftypefnx {C function} @code{void} mgl_end_group (@code{HMGL} gr)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} EndGroup ()
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_end_group (@code{HMGL} gr)
 Π—Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏΡ‹.
 @end deftypefn
 @end ifclear
@@ -865,13 +894,13 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @cindex ShowImage
 @end ifclear
 
-Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ (ΠΊΠ°Π΄Ρ€) Π² Ρ„Π°ΠΉΠ». Π˜ΠΌΡ Ρ„Π°ΠΉΠ»Π° @var{fname} Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{descr} Π΄Π°Π΅Ρ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ. ΠŸΠΎΠΊΠ° ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»Ρ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² PNG, SVG ΠΈ IDTF.
+Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ (ΠΊΠ°Π΄Ρ€) Π² Ρ„Π°ΠΉΠ». Π˜ΠΌΡ Ρ„Π°ΠΉΠ»Π° @var{fname} Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{descr} Π΄Π°Π΅Ρ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ. ΠŸΠΎΠΊΠ° ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»Ρ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² PNG, SVG, OBJ ΠΈ IDTF.
 
 @anchor{write}
-@deftypefn {MGL command} {} write 'fname'
+@deftypefn {MGL command} {} write ['fname'='']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} WriteFrame (@code{const char *}fname=@code{""}, @code{const char *}descr=@code{""})
-@deftypefnx {C function} @code{void} mgl_write_frame (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} WriteFrame (@code{const char *}fname=@code{""}, @code{const char *}descr=@code{""})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_write_frame (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
 @end ifclear
 Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ Π² Ρ„Π°ΠΉΠ» @var{fname} Ρ Ρ‚ΠΈΠΏΠΎΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡ‹ΠΌ ΠΏΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{descr} Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ‚ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡƒΡΡ‚Ρ‹ΠΌ). Π•сли @var{fname} ΠΏΡƒΡΡ‚ΠΎΠΉ, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΈΠΌΡ @samp{frame####.jpg}, Π³Π΄Π΅ @samp{####} -- Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ°Π΄Ρ€Π° ΠΈ ΠΈΠΌΡ @samp{frame} ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ @var{PlotId}.
 @end deftypefn
@@ -921,14 +950,36 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 
 @deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} WriteTEX (@code{const char *}fname, @code{const char *}descr=@code{""})
 @deftypefnx {Ѐункция Π‘} @code{void} mgl_write_tex (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
-ЭкспортируСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ Π² LaTeX Ρ„Π°ΠΉΠ» (ΠΏΠ°ΠΊΠ΅Ρ‚ Tikz/PGF), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (класс mglGraphPS). Π’слСдствиС Ρ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ (повСрхности, Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности ΡƒΡ€ΠΎΠ²Π½Ρ) ΠΈΠ·-Π·Π° Π±ΠΎΠ»ΡŒΡˆΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π°. Π₯отя Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅Ρ‚. Π”ля Π½ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PNG ΠΈΠ»ΠΈ JPEG). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: @var{fname} -- ΠΈΠΌΡ Ρ„Π°ΠΉΠ»Π°, @var{descr} -- ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°.
+ЭкспортируСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ Π² LaTeX Ρ„Π°ΠΉΠ» (ΠΏΠ°ΠΊΠ΅Ρ‚ Tikz/PGF), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π’слСдствиС Ρ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ (повСрхности, Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности ΡƒΡ€ΠΎΠ²Π½Ρ) ΠΈΠ·-Π·Π° Π±ΠΎΠ»ΡŒΡˆΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π°. Π₯отя Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅Ρ‚. Π”ля Π½ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PNG ΠΈΠ»ΠΈ JPEG). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: @var{fname} -- ΠΈΠΌΡ Ρ„Π°ΠΉΠ»Π°, @var{descr} -- ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°.
 @end deftypefn
 
 @deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} WriteOBJ (@code{const char *}fname, @code{const char *}descr=@code{""})
 @deftypefnx {Ѐункция Π‘} @code{void} mgl_write_obj (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
-ЭкспортируСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ Π² OBJ/MTL Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (класс mglGraphPS). Π’слСдствиС Ρ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ (повСрхности, Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности ΡƒΡ€ΠΎΠ²Π½Ρ) ΠΈΠ·-Π·Π° Π±ΠΎΠ»ΡŒΡˆΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π°. Π₯отя Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅Ρ‚. Π”ля Π½ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PNG ΠΈΠ»ΠΈ JPEG). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: @var{fname} -- ΠΈΠΌΡ Ρ„Π°ΠΉΠ»Π°, @var{descr} -- ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°.
+ЭкспортируСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ Π² OBJ/MTL Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (см. @url{http://en.wikipedia.org/wiki/Wavefront_.obj_file, OBJ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚}). Π’слСдствиС Ρ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ (повСрхности, Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности ΡƒΡ€ΠΎΠ²Π½Ρ) ΠΈΠ·-Π·Π° Π±ΠΎΠ»ΡŒΡˆΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π°. Π₯отя Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅Ρ‚. Π”ля Π½ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PNG ΠΈΠ»ΠΈ JPEG). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: @var{fname} -- ΠΈΠΌΡ Ρ„Π°ΠΉΠ»Π°, @var{descr} -- ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°.
+@end deftypefn
+
+
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} WriteXYZ (@code{const char *}fname, @code{const char *}descr=@code{""})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_write_xyz (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
+ЭкспортируСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ Π² XYZ/XYZL/XYZF Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (см. @url{http://people.sc.fsu.edu/~jburkardt/data/xyz/xyz.html, XYZ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚}). Π’слСдствиС Ρ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ (повСрхности, Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности ΡƒΡ€ΠΎΠ²Π½Ρ) ΠΈΠ·-Π·Π° Π±ΠΎΠ»ΡŒΡˆΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π°. Π₯отя Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅Ρ‚. Π”ля Π½ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PNG ΠΈΠ»ΠΈ JPEG). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: @var{fname} -- ΠΈΠΌΡ Ρ„Π°ΠΉΠ»Π°, @var{descr} -- ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°.
+@end deftypefn
+
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} WriteSTL (@code{const char *}fname, @code{const char *}descr=@code{""})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_write_stl (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
+ЭкспортируСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ Π² STL Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (см. @url{http://en.wikipedia.org/wiki/STL_(file_format), STL Ρ„ΠΎΡ€ΠΌΠ°Ρ‚}). Π’слСдствиС Ρ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ (повСрхности, Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности ΡƒΡ€ΠΎΠ²Π½Ρ) ΠΈΠ·-Π·Π° Π±ΠΎΠ»ΡŒΡˆΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π°. Π₯отя Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅Ρ‚. Π”ля Π½ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PNG ΠΈΠ»ΠΈ JPEG). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: @var{fname} -- ΠΈΠΌΡ Ρ„Π°ΠΉΠ»Π°, @var{descr} -- ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°.
+@end deftypefn
+
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} WriteOFF (@code{const char *}fname, @code{const char *}descr=@code{""}, @code{bool} colored=@code{false})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_write_off (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr, @code{bool} colored)
+ЭкспортируСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ Π² OFF Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (см. @url{http://people.sc.fsu.edu/~jburkardt/data/off/off.html, OFF Ρ„ΠΎΡ€ΠΌΠ°Ρ‚}). Π’слСдствиС Ρ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ (повСрхности, Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности ΡƒΡ€ΠΎΠ²Π½Ρ) ΠΈΠ·-Π·Π° Π±ΠΎΠ»ΡŒΡˆΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π°. Π₯отя Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅Ρ‚. Π”ля Π½ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PNG ΠΈΠ»ΠΈ JPEG). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: @var{fname} -- ΠΈΠΌΡ Ρ„Π°ΠΉΠ»Π°, @var{descr} -- ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°.
 @end deftypefn
 
+@c @deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} WriteX3D (@code{const char *}fname, @code{const char *}descr=@code{""})
+@c @deftypefnx {Ѐункция Π‘} @code{void} mgl_write_x3d (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
+@c Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ Π² X3D Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (см. @url{http://en.wikipedia.org/wiki/X3d, X3D Ρ„ΠΎΡ€ΠΌΠ°Ρ‚}). Π’слСдствиС Ρ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ (повСрхности, Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности ΡƒΡ€ΠΎΠ²Π½Ρ) ΠΈΠ·-Π·Π° Π±ΠΎΠ»ΡŒΡˆΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π°. Π₯отя Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅Ρ‚. Π”ля Π½ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PNG ΠΈΠ»ΠΈ JPEG). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: @var{fname} -- ΠΈΠΌΡ Ρ„Π°ΠΉΠ»Π°, @var{descr} -- ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°.
+@c @end deftypefn
+
+
 @deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} WriteIDTF (@code{const char *}fname, @code{const char *}descr=@code{""})
 @deftypefnx {Ѐункция Π‘} @code{void} mgl_write_idtf (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
 Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ Π² IDTF Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (класс mglGraphIDTF). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: @var{fname} -- ΠΈΠΌΡ Ρ„Π°ΠΉΠ»Π°, @var{descr} -- ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°.
@@ -939,6 +990,17 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Π΄Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π½Π΅ΡˆΠ½ΡŽΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π° @var{viewer}. Π€ΡƒΠ½ΠΊΡ†ΠΈΡ ΡΠΎΡ…раняСт ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ @var{viewer} Π΄Π»Ρ Π΅Π³ΠΎ ΠΎΡ‚обраТСния. Π•сли @var{nowait}=@code{true}, Ρ‚ΠΎ Ρ„ункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ -- Π½Π΅ ΠΆΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ° ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ.
 @end deftypefn
 
+
+@deftypefn {Method on @code{mglGraph}} @code{void} ExportMGLD (@code{const char *}fname, @code{const char *}descr=@code{""})
+@deftypefnx {C function} @code{void} mgl_export_mgld (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
+ЭкспортируСт Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ Π² Ρ„Π°ΠΉΠ» MGLD Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. Π’ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ ΡΡ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ @code{mglview}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: @var{fname} -- ΠΈΠΌΡ Ρ„Π°ΠΉΠ»Π°, @var{descr} -- ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°.
+@end deftypefn
+
+@deftypefn {Method on @code{mglGraph}} @code{void} ImportMGLD (@code{const char *}fname, @code{bool} add=@code{false})
+@deftypefnx {C function} @code{void} mgl_import_mgld (@code{HMGL} gr, @code{const char *}fname, @code{int} add)
+Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ MGLD. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: @var{fname} -- ΠΈΠΌΡ Ρ„Π°ΠΉΠ»Π°, @var{add} -- Ρ„Π»Π°Π³ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ².
+@end deftypefn
+
 @end ifclear
 
 
@@ -947,7 +1009,7 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @subsection ΠšΠ°Π΄Ρ€Ρ‹/Анимация
 
 @ifset UDAV
-Ð\92 MGL ΓΒ½ΓΒ΅Γ‘\82 Γ‘\81пСÑ\86иалÑ\8cнÑ\8bΓ‘\85 ΓΒΊΓΒΎΓΒΌΓΒΌΓΒ°ΓΒ½ΓΒ΄ ΓΒ΄ΓΒ»Γ‘\8f Γ‘\81озданиÑ\8f ΓΒ°ΓΒ½ΓΒΈΓΒΌΓΒ°Γ‘\86ии. Γ\9eднако ΓΒΌΓΒΎΓΒΆΓΒ½ΓΒΎ ΓΒ²ΓΒΎΓ‘\81полÑ\8cзоваÑ\82Γ‘\8cΓ‘\81Γ‘\8f ΓΒ²ΓΒΎΓΒ·ΓΒΌΓΒΎΓΒΆΓΒ½ΓΒΎΓ‘\81Γ‘\82Γ‘\8fми Γ‘\83Γ‘\82илиÑ\82 (@pxref{Utilities}). ΠΠ°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΡΠΏΠ΅ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° @samp{##a } ΠΈΠ»ΠΈ @samp{##c }.
+Ð\92 MGL ΓΒ½ΓΒ΅Γ‘\82 Γ‘\81пСÑ\86иалÑ\8cнÑ\8bΓ‘\85 ΓΒΊΓΒΎΓΒΌΓΒ°ΓΒ½ΓΒ΄ ΓΒ΄ΓΒ»Γ‘\8f Γ‘\81озданиÑ\8f ΓΒ°ΓΒ½ΓΒΈΓΒΌΓΒ°Γ‘\86ии. Γ\9eднако ΓΒΌΓΒΎΓΒΆΓΒ½ΓΒΎ ΓΒ²ΓΒΎΓ‘\81полÑ\8cзоваÑ\82Γ‘\8cΓ‘\81Γ‘\8f ΓΒ²ΓΒΎΓΒ·ΓΒΌΓΒΎΓΒΆΓΒ½ΓΒΎΓ‘\81Γ‘\82Γ‘\8fми Γ‘\83Γ‘\82илиÑ\82 (Γ‘\81м. @ref{Utilities}). ΠΠ°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΡΠΏΠ΅ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° @samp{##a } ΠΈΠ»ΠΈ @samp{##c }.
 @end ifset
 
 @ifclear UDAV
@@ -958,7 +1020,7 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @cindex StartGIF
 @cindex CloseGIF
 
-Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΡΠ»ΡƒΡ‡Π°Π΅Π² ΡΡ‚ΠΎ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π½ΠΎ Π΄Π»Ρ ΠΎΡ€Π³Π°Π½ΠΎΠ² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ (@pxref{Widget classes}) ΡΡ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°Π΄Ρ€ΠΎΠ² Π² Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ GIF Ρ„Π°ΠΉΠ».
+Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΡΠ»ΡƒΡ‡Π°Π΅Π² ΡΡ‚ΠΎ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π½ΠΎ Π΄Π»Ρ ΠΎΡ€Π³Π°Π½ΠΎΠ² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ (см. @ref{Widget classes}) ΡΡ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°Π΄Ρ€ΠΎΠ² Π² Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ GIF Ρ„Π°ΠΉΠ».
 
 @deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{int} NewFrame ()
 @deftypefnx {Ѐункция Π‘} @code{int} mgl_new_frame (@code{HMGL} gr)
@@ -998,8 +1060,9 @@ Setsize: Ρ€Π°Π·ΠΌΠ΅Ρ€(Ρ‹) Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
 @ifclear UDAV
 Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²Ρ‹ΠΉ Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ, Π΅Π³ΠΎ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ Π²Ρ‹ΡΠΎΡ‚Ρƒ. Π’ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π»ΡŽΠ±ΠΎΠΉ Π³Ρ€Π°Ρ„ичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ (см. Ρ‚Π°ΠΊΠΆΠ΅, @ref{Widget classes}) ΠΈΠ»ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» (см. Ρ‚Π°ΠΊΠΆΠ΅, @ref{Export to file}).
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} GetRGB (@code{char *}buf, @code{int} size)
-@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} GetBGRN (@code{char *}buf, @code{int} size)
+@deftypefn {Method on @code{mglGraph}} @code{const unsigned char *} GetRGB ()
+@deftypefnx {Method on @code{mglGraph}} @code{void} GetRGB (@code{char *}buf, @code{int} size)
+@deftypefnx {Method on @code{mglGraph}} @code{void} GetBGRN (@code{char *}buf, @code{int} size)
 @deftypefnx {C function} @code{const unsigned char *} mgl_get_rgb (@code{HMGL} gr)
 Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RGB Π΄Π»Ρ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Π΄Ρ€Π°. Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π° (пиксСля): @{red, green, blue@}. Π§ΠΈΡΠ»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Width*Height. ΠŸΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π° @{i,j@} Π΅ΡΡ‚ΡŒ [3*i + 3*Width*j] (ΠΈΠ»ΠΈ [4*i + 4*Width*j] Π΄Π»Ρ @code{GetBGRN()}). Π’ Python Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ @var{buf} Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° @var{size}, Ρ‚.Π΅. ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ
 @verbatim
@@ -1011,44 +1074,50 @@ gr.GetBGRN(bits, len(bits));
 @end verbatim
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} GetRGBA (@code{char *}buf, @code{int} size)
+@deftypefn {Method on @code{mglGraph}} @code{const unsigned char *} GetRGBA ()
+@deftypefnx {Method on @code{mglGraph}} @code{void} GetRGBA (@code{char *}buf, @code{int} size)
 @deftypefnx {C function} @code{const unsigned char *} mgl_get_rgba (@code{HMGL} gr)
 Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RGBA Π΄Π»Ρ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Π΄Ρ€Π°. Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π° (пиксСля): @{red, green, blue, alpha@}. Π§ΠΈΡΠ»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Width*Height. ΠŸΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π° @{i,j@} Π΅ΡΡ‚ΡŒ [4*i + 4*Width*j].
 @end deftypefn
 
 @deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{int} GetWidth ()
 @deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{int} GetHeight ()
-@deftypefnx {C function} @code{int} mgl_get_width (@code{HMGL} gr)
-@deftypefnx {C function} @code{int} mgl_get_height (@code{HMGL} gr)
+@deftypefnx {Ѐункция Π‘} @code{int} mgl_get_width (@code{HMGL} gr)
+@deftypefnx {Ѐункция Π‘} @code{int} mgl_get_height (@code{HMGL} gr)
 Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ Π²Ρ‹ΡΠΎΡ‚Ρƒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ.
 @end deftypefn
 
 
 @deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{mglPoint} CalcXYZ (@code{int} xs, @code{int} ys)
-@deftypefnx {C function} @code{void} mgl_calc_xyz (@code{HMGL} gr, @code{int} xs, @code{int} ys, @code{float *}x, @code{float *}y, @code{float *}z)
-ВычисляСт 3D ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @{x,y,z@} Π΄Π»Ρ ΡΠΊΡ€Π°Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ @{xs,ys@}. Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ся ΠΏΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² ΠΊΡ€ΠΈΠ²ΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹. Π’ычислСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚ся Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ InPlot (@pxref{Transformation matrix}).
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_calc_xyz (@code{HMGL} gr, @code{int} xs, @code{int} ys, @code{float *}x, @code{float *}y, @code{float *}z)
+ВычисляСт 3D ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @{x,y,z@} Π΄Π»Ρ ΡΠΊΡ€Π°Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ @{xs,ys@}. Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ся ΠΏΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² ΠΊΡ€ΠΈΠ²ΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹. Π’ычислСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚ся Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ InPlot (см. @ref{Transformation matrix}).
 @end deftypefn
 
 @deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{mglPoint} CalcScr (@code{mglPoint} p)
-@deftypefnx {C function} @code{void} mgl_calc_scr (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{int *}xs, @code{int *}ys)
-ВычисляСт ΡΠΊΡ€Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @{xs,ys@} Π΄Π»Ρ 3D ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ @{x,y,z@}. Π’ычислСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚ся Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ InPlot (@pxref{Transformation matrix}).
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_calc_scr (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{int *}xs, @code{int *}ys)
+ВычисляСт ΡΠΊΡ€Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @{xs,ys@} Π΄Π»Ρ 3D ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ @{x,y,z@}. Π’ычислСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚ся Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ InPlot (см. @ref{Transformation matrix}).
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{void} SetObjId (@code{int} id)
-@deftypefnx {C function} @code{void} mgl_set_obj_id (@code{HMGL} gr, @code{int} id)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetObjId (@code{int} id)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_obj_id (@code{HMGL} gr, @code{int} id)
 Π—Π°Π΄Π°Π΅Ρ‚ Ρ‡ΠΈΡΠ»ΠΎΠ²ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄Π»Ρ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ "ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ²".
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{int} GetObjId (@code{long} xs, @code{long} ys)
-@deftypefnx {C function} @code{int} mgl_get_obj_id (@code{HMGL} gr, @code{long} xs, @code{long} ys)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{int} GetObjId (@code{long} xs, @code{long} ys)
+@deftypefnx {Ѐункция Π‘} @code{int} mgl_get_obj_id (@code{HMGL} gr, @code{long} xs, @code{long} ys)
 Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‡ΠΈΡΠ»ΠΎΠ²ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ @{xs, ys@} Ρ€ΠΈΡΡƒΠ½ΠΊΠ°.
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{int} GetSplId (@code{long} xs, @code{long} ys)
-@deftypefnx {C function} @code{int} mgl_get_spl_id (@code{HMGL} gr, @code{long} xs, @code{long} ys)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{int} GetSplId (@code{long} xs, @code{long} ys)
+@deftypefnx {Ѐункция Π‘} @code{int} mgl_get_spl_id (@code{HMGL} gr, @code{long} xs, @code{long} ys)
 Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‡ΠΈΡΠ»ΠΎΠ²ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ "ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„ΠΈΠΊΠ°" Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ @{xs, ys@} Ρ€ΠΈΡΡƒΠ½ΠΊΠ°.
 @end deftypefn
 
+@deftypefn {Method on @code{mglGraph}} @code{void} Highlight (@code{int} id)
+@deftypefnx {C function} @code{void} mgl_highlight (@code{HMGL} gr, @code{int} id)
+ВыдСляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ @var{id}.
+@end deftypefn
+
 @end ifclear
 
 @c ------------------------------------------------------------------
@@ -1062,47 +1131,39 @@ gr.GetBGRN(bits, len(bits));
 @cindex MPI_Send
 @cindex MPI_Recv
 
-There are few functions which allow parallelization at user-level. First 2 limit the drawing region (for example, by subplot per thread) and copy data from that region in another @code{mglGraph} instance.
+МногиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MathGL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π»Ρ ΡƒΡΠΊΠΎΡ€Π΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ (Ссли MathGL Π±Ρ‹Π»Π° ΡΠΎΠ±Ρ€Π°Π½Π° Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ pthread). ΠŸΡ€ΠΈ ΡΡ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Ρ‡ΠΈΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².
 
-@deftypefn {Method on @code{mglGraph}} @code{int} SetDrawReg (@code{int} nx, @code{int} ny, @code{int} m)
-@deftypefnx {C function} @code{int} mgl_set_draw_reg (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m)
-Set drawable region as a @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area.
+@deftypefn {C function} @code{int} mgl_set_num_thr (@code{int} n)
+Π—Π°Π΄Π°Π΅Ρ‚ Ρ‡ΠΈΡΠ»ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΎ Π² MathGL. ΠŸΡ€ΠΈ @var{n}<1 Ρ‡ΠΈΡΠ»ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π·Π°Π΄Π°Π΅Ρ‚ся ΠΊΠ°ΠΊ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ‡ΠΈΡΠ»ΠΎ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ΠΎΠ² (ядСр) Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅. ΠŸΡ€ΠΈ @var{n}=1 Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Ρ€Π°ΡΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅.
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{int} PutDrawReg (@code{int} nx, @code{int} ny, @code{int} m, @code{const mglGraph *}g)
-@deftypefnx {C function} @code{int} mgl_put_draw_reg (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{HMGL} g)
-Put drawing from another instance @var{g} for a @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area. The width and height of both instances must be the same.
-@end deftypefn
-
-Another option is combining bitmap image (taking into account Z-ordering) from different instances. This method is most appropriate for computer clusters when the data size is so large that it exceed the memory of single computer node.
+Другая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ -- ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² @code{mglGraph}. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ…одят Π΄Π»Ρ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… ΠΊΠ»Π°ΡΡ‚Π΅Ρ€ΠΎΠ², ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅Π»ΠΈΠΊΠΈ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.
 
-@deftypefn {Method on @code{mglGraph}} @code{int} Combine (@code{const mglGraph *}g)
-@deftypefnx {C function} @code{int} mgl_combine_gr (@code{HMGL} gr, @code{HMGL} g)
-Combine drawing from instance @var{g} with @var{gr} (or with this) taking into account Z-ordering of pixels. The width and height of both instances must be the same.
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{int} Combine (@code{const mglGraph *}g)
+@deftypefnx {Ѐункция Π‘} @code{int} mgl_combine_gr (@code{HMGL} gr, @code{HMGL} g)
+ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ (добавляСт) Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ ΠΈΠ· @var{g} Ρ @var{gr}, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ``высоту'' ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ. Π¨ΠΈΡ€ΠΈΠ½Π° ΠΈ Π²Ρ‹ΡΠΎΡ‚Π° ΠΎΠ±ΠΎΠΈΡ… Ρ€ΠΈΡΡƒΠ½ΠΊΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹.
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{int} MPI_Send (@code{int} id)
-@deftypefnx {C function} @code{int} mgl_mpi_send (@code{HMGL} gr, @code{int} id)
-Send graphical information from node @var{id} using MPI. The width and height in both nodes must be the same.
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{int} MPI_Send (@code{int} id)
+@deftypefnx {Ѐункция Π‘} @code{int} mgl_mpi_send (@code{HMGL} gr, @code{int} id)
+ΠŸΠΎΡΡ‹Π»Π°Π΅Ρ‚ Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ ΠΈΠ· ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° (Π½ΠΎΠ΄Ρ‹) @var{id}, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ MPI. Π¨ΠΈΡ€ΠΈΠ½Π° ΠΈ Π²Ρ‹ΡΠΎΡ‚Π° ΠΎΠ±ΠΎΠΈΡ… Ρ€ΠΈΡΡƒΠ½ΠΊΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹.
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{int} MPI_Recv (@code{int} id)
-@deftypefnx {C function} @code{int} mgl_mpi_send (@code{HMGL} gr, @code{int} id)
-Receive graphical information from node @var{id} using MPI. The width and height in both nodes must be the same.
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{int} MPI_Recv (@code{int} id)
+@deftypefnx {Ѐункция Π‘} @code{int} mgl_mpi_send (@code{HMGL} gr, @code{int} id)
+ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ ΠΈΠ· ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° (Π½ΠΎΠ΄Ρ‹) @var{id}, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ MPI. Π¨ΠΈΡ€ΠΈΠ½Π° ΠΈ Π²Ρ‹ΡΠΎΡ‚Π° ΠΎΠ±ΠΎΠΈΡ… Ρ€ΠΈΡΡƒΠ½ΠΊΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹.
 @end deftypefn
 @end ifclear
 
 
 @c ##################################################################
-@node Primitives drawing, Text printing, Export picture, MathGL core
+@node Primitives, Text printing, Export picture, MathGL core
 @section Π ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ²
 @cindex Ball
 @cindex Clf
 @cindex Line
 @cindex Curve
 @cindex Glyph
-@cindex Mark
-@cindex Error
 @cindex Face
 @cindex FaceX
 @cindex FaceY
@@ -1111,34 +1172,40 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @cindex Drop
 @cindex Sphere
 
+@ifclear UDAV
+@cindex Mark
+@cindex Error
+@end ifclear
+
 Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Ρ€ΠΈΡΡƒΡŽΡ‚ ΠΏΡ€ΠΎΡΡ‚Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Π»ΠΈΠ½ΠΈΠΉ, Ρ‚ΠΎΡ‡Π΅ΠΊ, ΡΡ„Π΅Ρ€, ΠΊΠ°ΠΏΠ΅Π»ΡŒ, ΠΊΠΎΠ½ΡƒΡΠΎΠ², ΠΈ Ρ‚.Π΄.
 
 @anchor{clf}
 @deftypefn {MGL command} {} clf
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Clf ()
-@deftypefnx {Method on @code{mglGraph}} @code{void} Clf (@code{float} r, @code{float} g, @code{float} b)
-@deftypefnx {C function} @code{void} mgl_clf (@code{HMGL} gr)
-@deftypefnx {C function} @code{void} mgl_clf_rgb (@code{HMGL} gr, @code{float} r, @code{float} g, @code{float} b)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Clf ()
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Clf (@code{float} r, @code{float} g, @code{float} b)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_clf (@code{HMGL} gr)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_clf_rgb (@code{HMGL} gr, @code{float} r, @code{float} g, @code{float} b)
 @end ifclear
-ΠžΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{Back}.
+ΠžΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Ρ€ΠΈΡΡƒΠ½ΠΎΠΊ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ Π΅Π³ΠΎ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ.
 @end deftypefn
 
 @anchor{ball}
 @deftypefn {MGL command} {} ball @code{x y} ['col'='r.']
 @deftypefnx {MGL command} {} ball @code{x y z} ['col'='r.']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Ball (@code{mglPoint} p, @code{char} col=@code{'r'})
-@deftypefnx {Method on @code{mglGraph}} @code{void} Mark (@code{mglPoint} p, @code{const char *}mark)
-@deftypefnx {C function} @code{void} mgl_ball (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z)
-@deftypefnx {C function} @code{void} mgl_mark (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{const char *}mark)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Ball (@code{mglPoint} p, @code{char} col=@code{'r'})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Mark (@code{mglPoint} p, @code{const char *}mark)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_ball (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_mark (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{const char *}mark)
 @end ifclear
 Π ΠΈΡΡƒΠ΅Ρ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ (Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) Ρ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ @var{p}=@{@var{x}, @var{y}, @var{z}@} ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{col}.
 @end deftypefn
 
 @ifclear UDAV
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Error (@code{mglPoint} p, @code{mglPoint} e, @code{char} *pen=@code{""})
-РисуСт 3d error box Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ @var{p} Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ @var{e} ΠΈ ΡΡ‚ΠΈΠ»Π΅ΠΌ @var{pen}.
+@deftypefn {Method on @code{mglGraph}} @code{void} Error (@code{mglPoint} p, @code{mglPoint} e, @code{char} *stl=@code{""})
+@deftypefnx {C function} @code{void} mgl_error_box (@code{HMGL} gr, @code{float} px, @code{float} py, @code{float} pz, @code{float} ex, @code{float} ey, @code{float} ez, @code{char *}stl)
+РисуСт 3d error box Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ @var{p} Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ @var{e} ΠΈ ΡΡ‚ΠΈΠ»Π΅ΠΌ @var{stl}.
 @end deftypefn
 @end ifclear
 
@@ -1146,8 +1213,8 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @deftypefn {MGL command} {} line @code{x1 y1 x2 y2} ['stl'='']
 @deftypefnx {MGL command} {} line @code{x1 y1 z1 x2 y2 z2} ['stl'='']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Line (@code{mglPoint} p1, @code{mglPoint} p2, @code{char *}stl=@code{"B"}, @code{int}num=@code{2})
-@deftypefnx {C function} @code{void} mgl_line (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{char *}stl, @code{int}num)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Line (@code{mglPoint} p1, @code{mglPoint} p2, @code{char *}stl=@code{"B"}, @code{int}num=@code{2})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_line (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{char *}stl, @code{int}num)
 @end ifclear
 Π ΠΈΡΡƒΠ΅Ρ‚ Π³Π΅ΠΎΠ΄Π΅Π·ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π»ΠΈΠ½ΠΈΡŽ (Π΄Π΅ΠΊΠ°Ρ€Ρ‚ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… -- ΠΏΡ€ΡΠΌΡƒΡŽ) ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ @var{p1} Π² @var{p2} ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ @var{stl}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{num} ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Π³Π»Π°Π΄ΠΊΠΎΡΡ‚ΡŒ Π»ΠΈΠ½ΠΈΠΈ (число Ρ‚ΠΎΡ‡Π΅ΠΊ Π½Π° Π»ΠΈΠ½ΠΈΠΈ). Π•сли @var{num}=@code{2}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΠΏΡ€ΡΠΌΠ°Ρ Π΄Π°ΠΆΠ΅ Π² ΠΊΡ€ΠΈΠ²ΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ…. ΠΠ°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π΄Π»Ρ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, =@code{100}) Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π³Π΅ΠΎΠ΄Π΅Π·ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π»ΠΈΠ½ΠΈΡ (ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ Π² ΠΏΠΎΠ»ΡΡ€Π½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ…, ΠΏΠ°Ρ€Π°Π±ΠΎΠ»Π° Π² ΠΏΠ°Ρ€Π°Π±ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΠΈΡ… ΠΈ Ρ‚.Π΄.). Π›ΠΈΠ½ΠΈΡ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Ρ‡Π°ΡΡ‚ΡŒ Π΅Π΅ Π»Π΅ΠΆΠΈΡ‚ Π²Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.
 @end deftypefn
@@ -1156,15 +1223,15 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @deftypefn {MGL command} {} curve @code{x1 y1 dx1 dy1 x2 y2 dx2 dy2} ['stl'='']
 @deftypefnx {MGL command} {} curve @code{x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2} ['stl'='']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Curve (@code{mglPoint} p1, @code{mglPoint} d1, @code{mglPoint} p2, @code{mglPoint} d2, @code{const char *}stl=@code{"B"}, @code{int} num=@code{100})
-@deftypefnx {C function} @code{void} mgl_curve (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} dx1, @code{float} dy1, @code{float} dz1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} dx2, @code{float} dy2, @code{float} dz2, @code{const char *}stl, @code{int} num)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Curve (@code{mglPoint} p1, @code{mglPoint} d1, @code{mglPoint} p2, @code{mglPoint} d2, @code{const char *}stl=@code{"B"}, @code{int} num=@code{100})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_curve (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} dx1, @code{float} dy1, @code{float} dz1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} dx2, @code{float} dy2, @code{float} dz2, @code{const char *}stl, @code{int} num)
 @end ifclear
 Π ΠΈΡΡƒΠ΅Ρ‚ ΠΊΡ€ΠΈΠ²ΡƒΡŽ Π‘Π΅Π·ΡŒΠ΅ ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ @var{p1} Π² @var{p2} ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ @var{stl}. ΠšΠ°ΡΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ @var{d1}, @var{d2}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{num} ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Π³Π»Π°Π΄ΠΊΠΎΡΡ‚ΡŒ Π»ΠΈΠ½ΠΈΠΈ (число Ρ‚ΠΎΡ‡Π΅ΠΊ Π½Π° Π»ΠΈΠ½ΠΈΠΈ). ΠšΡ€ΠΈΠ²Π°Ρ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Ρ‡Π°ΡΡ‚ΡŒ Π΅Π΅ Π»Π΅ΠΆΠΈΡ‚ Π²Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.
 @end deftypefn
 
 @ifclear UDAV
-@deftypefn {Method on @code{mglGraph}} @code{void} Face (@code{mglPoint} p1, @code{mglPoint} p2, @code{mglPoint} p3, @code{mglPoint} p4, @code{const char *}stl=@code{"w"})
-@deftypefnx {C function} @code{void} mgl_curve (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} x3, @code{float} y3, @code{float} z3, @code{float} x4, @code{float} y4, @code{float} z4, @code{const char *}stl)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Face (@code{mglPoint} p1, @code{mglPoint} p2, @code{mglPoint} p3, @code{mglPoint} p4, @code{const char *}stl=@code{"w"})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_curve (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} x3, @code{float} y3, @code{float} z3, @code{float} x4, @code{float} y4, @code{float} z4, @code{const char *}stl)
 Π ΠΈΡΡƒΠ΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (Π³Ρ€Π°Π½ΡŒ) Ρ ΡƒΠ³Π»Π°ΠΌΠΈ Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @var{p1}, @var{p2}, @var{p3}, @var{p4} ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠΌ(-Π°ΠΌΠΈ) @var{stl}. ΠŸΡ€ΠΈ ΡΡ‚ΠΎΠΌ Ρ†Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π΄Π»Ρ Π²ΡΠ΅ΠΉ Π³Ρ€Π°Π½ΠΈ, ΠΈΠ»ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π΅ΡΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π²ΡΠ΅ 4 Ρ†Π²Π΅Ρ‚Π°. Π“Ρ€Π°Π½ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Π½Π° Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Ρ‡Π°ΡΡ‚ΡŒ Π΅Π΅ Π»Π΅ΠΆΠΈΡ‚ Π²Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.
 @end deftypefn
 @end ifclear
@@ -1175,12 +1242,12 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @deftypefn {MGL command} {} facex @code{x0 y0 z0 wy wz} ['stl'='' @code{d1=0 d2=0}]
 @deftypefnx {MGL command} {} facey @code{x0 y0 z0 wx wz} ['stl'='' @code{d1=0 d2=0}]
 @deftypefnx {MGL command} {} facez @code{x0 y0 z0 wx wy} ['stl'='' @code{d1=0 d2=0}]
-@deftypefnx {Method on @code{mglGraph}} @code{void} FaceX (@code{float} x0, @code{float} y0, @code{float} z0, @code{float} wy, @code{float} wz, @code{const char *}stl=@code{"w"}, @code{float} d1=@code{0}, @code{float} d2=@code{0})
-@deftypefnx {Method on @code{mglGraph}} @code{void} FaceY (@code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wz, @code{const char *}stl=@code{"w"}, @code{float} d1=@code{0}, @code{float} d2=@code{0})
-@deftypefnx {Method on @code{mglGraph}} @code{void} FaceZ (@code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wy, @code{const char *}stl=@code{"w"}, @code{float} d1=@code{0}, @code{float} d2=@code{0})
-@deftypefnx {C function} @code{void} mgl_facex (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wy, @code{float} wz, @code{const char *}stl, @code{float} d1, @code{float} d2)
-@deftypefnx {C function} @code{void} mgl_facey (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wz, @code{const char *}stl, @code{float} d1, @code{float} d2)
-@deftypefnx {C function} @code{void} mgl_facez (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wy, @code{const char *}stl, @code{float} d1, @code{float} d2)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} FaceX (@code{float} x0, @code{float} y0, @code{float} z0, @code{float} wy, @code{float} wz, @code{const char *}stl=@code{"w"}, @code{float} d1=@code{0}, @code{float} d2=@code{0})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} FaceY (@code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wz, @code{const char *}stl=@code{"w"}, @code{float} d1=@code{0}, @code{float} d2=@code{0})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} FaceZ (@code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wy, @code{const char *}stl=@code{"w"}, @code{float} d1=@code{0}, @code{float} d2=@code{0})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_facex (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wy, @code{float} wz, @code{const char *}stl, @code{float} d1, @code{float} d2)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_facey (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wz, @code{const char *}stl, @code{float} d1, @code{float} d2)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_facez (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wy, @code{const char *}stl, @code{float} d1, @code{float} d2)
 Π ΠΈΡΡƒΠ΅Ρ‚ Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (Π³Ρ€Π°Π½ΡŒ) ΠΏΠ΅Ρ€ΠΏΠ΅Π½Π΄ΠΈΠΊΡƒΠ»ΡΡ€Π½ΠΎ ΠΎΡΠΈ [x,y,z] Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ @{@var{x0}, @var{y0}, @var{z0}@} Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{stl} ΠΈ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ @var{wx}, @var{wy}, @var{wz} Π²Π΄ΠΎΠ»ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ. ΠŸΡ€ΠΈ ΡΡ‚ΠΎΠΌ Ρ†Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π΄Π»Ρ Π²ΡΠ΅ΠΉ Π³Ρ€Π°Π½ΠΈ, ΠΈΠ»ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π΄Π»Ρ Ρ€Π°Π·Π½Ρ‹Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½ Π΅ΡΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π²ΡΠ΅ 4 Ρ†Π²Π΅Ρ‚Π°. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ @var{d1}!=0, @var{d2}!=0 Π·Π°Π΄Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡΠ΄Π²ΠΈΠ³ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ (Ρ‚.Π΅. Ρ€ΠΈΡΡƒΡŽΡ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ).Π“Ρ€Π°Π½ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Π½Π° Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Ρ‡Π°ΡΡ‚ΡŒ Π΅Π΅ Π»Π΅ΠΆΠΈΡ‚ Π²Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.
 @end deftypefn
 
@@ -1188,17 +1255,17 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @deftypefn {MGL command} {} sphere @code{x0 y0 r} ['col'='r']
 @deftypefnx {MGL command} {} sphere @code{x0 y0 z0 r} ['col'='r']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Sphere (@code{mglPoint} p, @code{float} r, @code{const char *}stl=@code{"r"})
-@deftypefnx {C function} @code{void} mgl_sphere (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} r, @code{const char *}stl)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Sphere (@code{mglPoint} p, @code{float} r, @code{const char *}stl=@code{"r"})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_sphere (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} r, @code{const char *}stl)
 @end ifclear
 Π ΠΈΡΡƒΠ΅Ρ‚ ΡΡ„Π΅Ρ€Ρƒ Ρ€Π°Π΄ΠΈΡƒΡΠ° @var{r} Ρ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ @var{p}=@{@var{x0}, @var{y0}, @var{z0}@} Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{stl}.
 @end deftypefn
 
 @anchor{drop}
-@deftypefn {MGL command} {} drop @code{x0 y0 dx dy r} ['col'='b' @code{sh=1 asp=1}]
-@deftypefnx {MGL command} {} drop @code{x0 y0 z0 dx dy dz r} ['col'='b' @code{sh=1 asp=1}]
+@deftypefn {MGL command} {} drop @code{x0 y0 dx dy r} ['col'='r' @code{sh=1 asp=1}]
+@deftypefnx {MGL command} {} drop @code{x0 y0 z0 dx dy dz r} ['col'='r' @code{sh=1 asp=1}]
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Drop (@code{mglPoint} p, @code{mglPoint} d, @code{float} r, @code{mglColor} col, @code{float} shift=@code{1}, @code{float} ap=@code{1})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Drop (@code{mglPoint} p, @code{mglPoint} d, @code{float} r, @code{const char *}col=@code{"r"}, @code{float} shift=@code{1}, @code{float} ap=@code{1})
 @deftypefnx {C function} @code{void} mgl_drop (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} dx, @code{float} dy, @code{float} dz, @code{float} r, @code{const char *}col, @code{float} shift, @code{float} ap)
 @end ifclear
 Π ΠΈΡΡƒΠ΅Ρ‚ ΠΊΠ°ΠΏΠ»ΡŽ Ρ€Π°Π΄ΠΈΡƒΡΠ° @var{r} Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ @var{p} Π²Ρ‹Ρ‚ΡΠ½ΡƒΡ‚ΡƒΡŽ Π²Π΄ΠΎΠ»ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ @var{d} Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{col}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{shift} ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π²Ρ‹Ρ‚янутости: @samp{0} -- ΡΡ„Π΅Ρ€Π°, @samp{1} -- ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ ΠΊΠ°ΠΏΠ»Ρ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{ap} ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΊΠ°ΠΏΠ»ΠΈ (Π°Π½Π°Π»ΠΎΠ³ "эллиптичности" Π΄Π»Ρ ΡΡ„Π΅Ρ€Ρ‹). @sref{Drops sample}
@@ -1207,8 +1274,8 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @anchor{cone}
 @deftypefn {MGL command} {} cone @code{x1 y1 z1 x2 y2 z2 r1} [@code{r2=-1} 'stl'='' @code{edge=off}]
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Cone (@code{mglPoint} p1, @code{mglPoint} p2, @code{float} r1, @code{float} r2=@code{-1}, @code{const char *}stl=@code{"B"}, @code{bool} edge=@code{false})
-@deftypefnx {C function} @code{void} mgl_cone (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} r1, @code{float} r2, @code{const char *}stl, @code{int} draw_edge)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Cone (@code{mglPoint} p1, @code{mglPoint} p2, @code{float} r1, @code{float} r2=@code{-1}, @code{const char *}stl=@code{"B"}, @code{bool} edge=@code{false})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_cone (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} r1, @code{float} r2, @code{const char *}stl, @code{int} draw_edge)
 @end ifclear
 Π ΠΈΡΡƒΠ΅Ρ‚ Ρ‚Ρ€ΡƒΠ±Ρƒ (ΠΈΠ»ΠΈ ΡƒΡΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½ΡƒΡ Π΅ΡΠ»ΠΈ @var{edge}=@code{false}) ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @var{p1}, @var{p2} Ρ Ρ€Π°Π΄ΠΈΡƒΡΠ°ΠΌΠΈ Π½Π° ΠΊΠΎΠ½Ρ†Π°Ρ… @var{r1}, @var{r2}. Π•сли @var{r2}<0, Ρ‚ΠΎ ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ся @var{r2}=@var{r1}. Π¦Π²Π΅Ρ‚ ΠΊΠΎΠ½ΡƒΡΠ° Π·Π°Π΄Π°Π΅Ρ‚ся ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ @var{stl}.
 @end deftypefn
@@ -1217,7 +1284,7 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @deftypefn {MGL command} {} circle @code{x0 y0 r} ['col'='r']
 @deftypefnx {MGL command} {} circle @code{x0 y0 z0 r} ['col'='r']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Circle (@code{mglPoint} p, @code{float} r, @code{const char *}stl=@code{"r"})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Circle (@code{mglPoint} p, @code{float} r, @code{const char *}stl=@code{"r"})
 @end ifclear
 Π ΠΈΡΡƒΠ΅Ρ‚ ΠΊΡ€ΡƒΠ³ Ρ€Π°Π΄ΠΈΡƒΡΠ° @var{r} Ρ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ @var{p}=@{@var{x0}, @var{y0}, @var{z0}@} Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{stl}. Π•сли @var{col} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚: @samp{#} Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Ρ€Π°Π½ΠΈΡ†Π°, @samp{@@} Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π³Ρ€Π°Π½ΠΈΡ†Π° (Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· @var{col} ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π½Ρ‹ΠΌΠΈ).
 @end deftypefn
@@ -1226,8 +1293,8 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @deftypefn {MGL command} {} ellipse @code{x1 y1 x2 y2 r} ['col'='r' @code{sh=1 asp=1}]
 @deftypefnx {MGL command} {} ellipse @code{x1 y1 z1 x2 y2 z2 r} ['col'='r' @code{sh=1 asp=1}]
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Ellipse (@code{mglPoint} p1, @code{mglPoint} p2, @code{float} r, @code{const char *}col=@code{"r"})
-@deftypefnx {C function} @code{void} mgl_ellipse(@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} r, @code{const char *}col)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Ellipse (@code{mglPoint} p1, @code{mglPoint} p2, @code{float} r, @code{const char *}col=@code{"r"})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_ellipse(@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} r, @code{const char *}col)
 @end ifclear
 Π ΠΈΡΡƒΠ΅Ρ‚ ΠΊΡ€ΡƒΠ³ Ρ€Π°Π΄ΠΈΡƒΡΠ° @var{r} Ρ Ρ„окусами Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @var{p1}, @var{p2} Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{stl}. Π•сли @var{col} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚: @samp{#} Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Ρ€Π°Π½ΠΈΡ†Π°, @samp{@@} Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π³Ρ€Π°Π½ΠΈΡ†Π° (Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· @var{col} ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π½Ρ‹ΠΌΠΈ). @sref{Ellipse sample}
 @end deftypefn
@@ -1236,14 +1303,14 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @deftypefn {MGL command} {} rhomb @code{x1 y1 x2 y2 r} ['col'='r' @code{sh=1 asp=1}]
 @deftypefnx {MGL command} {} rhomb @code{x1 y1 z1 x2 y2 z2 r} ['col'='r' @code{sh=1 asp=1}]
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Rhomb (@code{mglPoint} p1, @code{mglPoint} p2, @code{float} r, @code{const char *}col=@code{"r"})
-@deftypefnx {C function} @code{void} mgl_rhomb(@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} r, @code{const char *}col)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Rhomb (@code{mglPoint} p1, @code{mglPoint} p2, @code{float} r, @code{const char *}col=@code{"r"})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_rhomb(@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} r, @code{const char *}col)
 @end ifclear
 Π ΠΈΡΡƒΠ΅Ρ‚ Ρ€ΠΎΠΌΠ± ΡˆΠΈΡ€ΠΈΠ½Ρ‹ @var{r} Ρ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @var{p1}, @var{p2} Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{stl}. Π•сли @var{col} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚: @samp{#} Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Ρ€Π°Π½ΠΈΡ†Π°, @samp{@@} Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π³Ρ€Π°Π½ΠΈΡ†Π° (Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· @var{col} ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π½Ρ‹ΠΌΠΈ). Π•сли @var{col} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ 3 Ρ†Π²Π΅Ρ‚Π°, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ная Π·Π°Π»ΠΈΠ²ΠΊΠ°. @sref{Ellipse sample}
 @end deftypefn
 
 @c ##################################################################
-@node Text printing, Axis and Colorbar, Primitives drawing, MathGL core
+@node Text printing, Axis and Colorbar, Primitives, MathGL core
 @section Π’Ρ‹Π²ΠΎΠ΄ Ρ‚Скста
 @ifclear UDAV
 @cindex Puts
@@ -1253,20 +1320,22 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @cindex Label
 @cindex fgets
 
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π»Ρ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Скста ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹Π²Π΅ΡΡ‚ΠΈ ΡΡ‚Ρ€ΠΎΠΊΡƒ Ρ‚Скста Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ ΠΌΠ΅ΡΡ‚Π΅ Ρ€ΠΈΡΡƒΠ½ΠΊΠ°, Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ Π²Π΄ΠΎΠ»ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΊΡ€ΠΈΠ²ΠΎΠΉ. MathGL ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ Π½Π°Ρ‡Π΅Ρ€Ρ‚Π°Π½ΠΈΠ΅ ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π’Π΅Π₯-ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Π΅Π΅ @pxref{Font styles}). Π’сС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Скста ΠΈΠΌΠ΅ΡŽΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π΄Π»Ρ 8-bit ΡΡ‚Ρ€ΠΎΠΊ (@code{char *}) ΠΈ Π΄Π»Ρ Unicode ΡΡ‚Ρ€ΠΎΠΊ (@code{wchar_t *}). Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΊΠΎΠ½Π²Π΅Ρ€ΡΠΈΡ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ, Ρ‚.Π΅. ΠΈΠ½ΠΎΠ³Π΄Π° Π²Π°ΠΌ Ρ‚рСбуСтся ΡΠ²Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒ Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ @code{setlocale()}. ΠΡ€Π³ΡƒΠΌΠ΅Π½Ρ‚ @var{size} ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Скста: Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ (=-@var{size}*@var{FontSize}) Π΅ΡΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π΅Π½. ΠΠ°Ρ‡Π΅Ρ€Ρ‚Π°Π½ΠΈΠ΅ ΡˆΡ€ΠΈΡ„Ρ‚Π° (STIX, arial, courier, times ΠΈ Π΄Ρ€) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ LoadFont(). @xref{Font settings}.
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π»Ρ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Скста ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹Π²Π΅ΡΡ‚ΠΈ ΡΡ‚Ρ€ΠΎΠΊΡƒ Ρ‚Скста Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ ΠΌΠ΅ΡΡ‚Π΅ Ρ€ΠΈΡΡƒΠ½ΠΊΠ°, Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ Π²Π΄ΠΎΠ»ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΊΡ€ΠΈΠ²ΠΎΠΉ. MathGL ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ Π½Π°Ρ‡Π΅Ρ€Ρ‚Π°Π½ΠΈΠ΅ ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π’Π΅Π₯-ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Π΅Π΅ ΡΠΌ. @ref{Font styles}). Π’сС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Скста ΠΈΠΌΠ΅ΡŽΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π΄Π»Ρ 8-bit ΡΡ‚Ρ€ΠΎΠΊ (@code{char *}) ΠΈ Π΄Π»Ρ Unicode ΡΡ‚Ρ€ΠΎΠΊ (@code{wchar_t *}). Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΊΠΎΠ½Π²Π΅Ρ€ΡΠΈΡ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ, Ρ‚.Π΅. ΠΈΠ½ΠΎΠ³Π΄Π° Π²Π°ΠΌ Ρ‚рСбуСтся ΡΠ²Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒ Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ @code{setlocale()}. ΠΡ€Π³ΡƒΠΌΠ΅Π½Ρ‚ @var{size} ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Скста: Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ (=-@var{size}*@var{FontSize}) Π΅ΡΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π΅Π½. ΠΠ°Ρ‡Π΅Ρ€Ρ‚Π°Π½ΠΈΠ΅ ΡˆΡ€ΠΈΡ„Ρ‚Π° (STIX, arial, courier, times ΠΈ Π΄Ρ€) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ LoadFont(). @xref{Font settings}.
 
-ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΡˆΡ€ΠΈΡ„Ρ‚Π° Π·Π°Π΄Π°ΡŽΡ‚ся ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ, ΠΊΠΎΡ‚орая ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ Ρ†Π²Π΅Ρ‚Π° @samp{wkrgbcymhRGBCYMHW} (@pxref{Line styles}) ΠΈ, ΠΏΠΎΡΠ»Π΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° @samp{:},  ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΡΡ‚иля (@samp{rbiwou}) ΠΈ/ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΡ (@samp{LRC}). Π‘Ρ‚ΠΈΠ»ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚Π°: @samp{r} -- ΠΏΡ€ΡΠΌΠΎΠΉ, @samp{i} -- ΠΊΡƒΡ€ΡΠΈΠ², @samp{b} -- ΠΆΠΈΡ€Π½Ρ‹ΠΉ, @samp{w} -- ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π½Ρ‹ΠΉ, @samp{o} -- Π½Π°Π΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚Ρ‹ΠΉ, @samp{u} -- ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚Ρ‹ΠΉ. ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΡΠΌΠΎΠΉ ΡˆΡ€ΠΈΡ„Ρ‚. Π’ΠΈΠΏΡ‹ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΡ: @samp{L} -- ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), @samp{C} -- ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ, @samp{R} -- ΠΏΠΎ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ. ΠΠ°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΡ‚Ρ€ΠΎΠΊΠ° @samp{b:iC} ΡΠΎΠΎΡ‚вСтствуСт ΠΊΡƒΡ€ΡΠΈΠ²Ρƒ ΡΠΈΠ½Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚Π° Ρ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ.
+ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΡˆΡ€ΠΈΡ„Ρ‚Π° Π·Π°Π΄Π°ΡŽΡ‚ся ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ, ΠΊΠΎΡ‚орая ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ Ρ†Π²Π΅Ρ‚Π° @samp{wkrgbcymhRGBCYMHW} (см. @ref{Line styles}) ΠΈ, ΠΏΠΎΡΠ»Π΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° @samp{:},  ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΡΡ‚иля (@samp{rbiwou}) ΠΈ/ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΡ (@samp{LRC}). Π‘Ρ‚ΠΈΠ»ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚Π°: @samp{r} -- ΠΏΡ€ΡΠΌΠΎΠΉ, @samp{i} -- ΠΊΡƒΡ€ΡΠΈΠ², @samp{b} -- ΠΆΠΈΡ€Π½Ρ‹ΠΉ, @samp{w} -- ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π½Ρ‹ΠΉ, @samp{o} -- Π½Π°Π΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚Ρ‹ΠΉ, @samp{u} -- ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚Ρ‹ΠΉ. ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΡΠΌΠΎΠΉ ΡˆΡ€ΠΈΡ„Ρ‚. Π’ΠΈΠΏΡ‹ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΡ: @samp{L} -- ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), @samp{C} -- ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ, @samp{R} -- ΠΏΠΎ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ. ΠΠ°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΡ‚Ρ€ΠΎΠΊΠ° @samp{b:iC} ΡΠΎΠΎΡ‚вСтствуСт ΠΊΡƒΡ€ΡΠΈΠ²Ρƒ ΡΠΈΠ½Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚Π° Ρ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ.
 
 Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ @samp{aA}, Ρ‚ΠΎ Ρ‚Скст Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ся Π² Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… (ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [0,1]). ΠŸΡ€ΠΈ ΡΡ‚ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ся ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€ΠΈΡΡƒΠ½ΠΊΠ° (Ссли ΡƒΠΊΠ°Π·Π°Π½ΠΎ @samp{A}) ΠΈΠ»ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ SubPlot()/InPlot() (Ссли ΡƒΠΊΠ°Π·Π°Π½ΠΎ @samp{a}). Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{@@}, Ρ‚ΠΎ Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ‚Скста Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ.
 
+@sref{Text features}
+
 @anchor{text}
 @deftypefn {MGL command} {} text @code{x y} 'text' ['fnt'='' @code{size=-1}]
 @deftypefnx {MGL command} {} text @code{x y z} 'text' ['fnt'='' @code{size=-1}]
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Puts (@code{mglPoint} p, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{float} size=@code{-1})
-@deftypefnx {Method on @code{mglGraph}} @code{void} Putsw (@code{mglPoint} p, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{float} size=@code{-1})
-@deftypefnx {C function} @code{void} mgl_puts (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{const char *}text, @code{const char *}fnt, @code{float} size)
-@deftypefnx {C function} @code{void} mgl_putsw (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{const wchar_t *}text, @code{const char *}fnt, @code{float} size)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Puts (@code{mglPoint} p, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{float} size=@code{-1})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Putsw (@code{mglPoint} p, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{float} size=@code{-1})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_puts (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{const char *}text, @code{const char *}fnt, @code{float} size)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_putsw (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{const wchar_t *}text, @code{const char *}fnt, @code{float} size)
 @end ifclear
 Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΡ‚Ρ€ΠΎΠΊΡƒ @var{text} ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ @var{p} ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡ‹ΠΌ ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ @var{fnt}.
 @end deftypefn
@@ -1274,10 +1343,10 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @deftypefn {MGL command} {} text @code{x y dx dy} 'text' ['fnt'=':L' @code{size=-1}]
 @deftypefnx {MGL command} {} text @code{x y z dx dy dz} 'text' ['fnt'=':L' @code{size=-1}]
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Puts (@code{mglPoint} p, @code{mglPoint} d, @code{const char *}text, @code{const char *}fnt=@code{':L'}, @code{float} size=@code{-1})
-@deftypefnx {Method on @code{mglGraph}} @code{void} Putsw (@code{mglPoint} p, @code{mglPoint} d, @code{const wchar_t *}text, @code{const char *}fnt=@code{':L'}, @code{float} size=@code{-1})
-@deftypefnx {C function} @code{void} mgl_puts_dir (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{float} dx, @code{float} dy, @code{float} dz, @code{const char *}text, @code{const char *}fnt, @code{float} size)
-@deftypefnx {C function} @code{void} mgl_putsw_dir (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{float} dx, @code{float} dy, @code{float} dz, @code{const wchar_t *}text, @code{const char *}fnt, @code{float} size)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Puts (@code{mglPoint} p, @code{mglPoint} d, @code{const char *}text, @code{const char *}fnt=@code{':L'}, @code{float} size=@code{-1})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Putsw (@code{mglPoint} p, @code{mglPoint} d, @code{const wchar_t *}text, @code{const char *}fnt=@code{':L'}, @code{float} size=@code{-1})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_puts_dir (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{float} dx, @code{float} dy, @code{float} dz, @code{const char *}text, @code{const char *}fnt, @code{float} size)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_putsw_dir (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{float} dx, @code{float} dy, @code{float} dz, @code{const wchar_t *}text, @code{const char *}fnt, @code{float} size)
 @end ifclear
 Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΡ‚Ρ€ΠΎΠΊΡƒ @var{text} ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ @var{p} Π²Π΄ΠΎΠ»ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ @var{d}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{fnt} Π·Π°Π΄Π°Π΅Ρ‚ ΡΡ‚ΠΈΠ»ΡŒ Ρ‚Скста ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Скст Π½Π°Π΄ Π»ΠΈΠ½ΠΈΠ΅ΠΉ (@samp{T}) ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ Π½Π΅ΠΉ (@samp{t}).
 @end deftypefn
@@ -1288,34 +1357,24 @@ Receive graphical information from node @var{id} using MPI. The width and height
 Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ @var{n}-ΡƒΡŽ ΡΡ‚Ρ€ΠΎΠΊΡƒ Ρ„Π°ΠΉΠ»Π° @var{fname} ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ @{@var{x},@var{y},@var{z}@} ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ @var{fnt} ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ @var{size}.
 @end deftypefn
 
-@anchor{label}
-@deftypefn {MGL command} {} label @code{x y} 'text' ['fnt'='']
-@ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{float} x, @code{float} y, @code{const char *}text, @code{const char *}fnt=@code{""})
-@deftypefnx {Method on @code{mglGraph}} @code{void} Labelw (@code{float} x, @code{float} y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""})
-@deftypefnx {C function} @code{void} mgl_label_xy (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const char *}text, @code{const char *}fnt)
-@deftypefnx {C function} @code{void} mgl_labelw_xy (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const wchar_t *}text, @code{const char *}fnt)
-@end ifclear
-Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΡ‚Ρ€ΠΎΠΊΡƒ @var{text} Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ ΠΌΠ΅ΡΡ‚Π΅ ΡΠΊΡ€Π°Π½Π° ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ @{@var{x}, @var{y}@} ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ @var{fnt}. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @code{x, y} ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌΠΈ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [0,1].
-@end deftypefn
-
+@deftypefn {MGL command} {} text ydat 'text' ['fnt'='']
 @deftypefnx {MGL command} {} text xdat ydat 'text' ['fnt'='' @code{size=-1 zval=nan}]
 @deftypefnx {MGL command} {} text xdat ydat zdat 'text' ['fnt'='' @code{size=-1}]
 @ifclear UDAV
-@deftypefn {Method on @code{mglGraph}} @code{void} Text (@code{const mglData &}y, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
-@deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglData &}y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
-@deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
-@deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
-@deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
-@deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
-@deftypefnx {C function} @code{void} mgl_text_y (@code{HMGL} gr, @code{HCDT} y, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt)
-@deftypefnx {C function} @code{void} mgl_textw_y (@code{HMGL} gr, @code{HCDT} y, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt)
-@deftypefnx {C function} @code{void} mgl_text_xy (@code{HCDT} x, @code{HCDT} y, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt)
-@deftypefnx {C function} @code{void} mgl_textw_xy (@code{HCDT} x, @code{HCDT} y, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt)
-@deftypefnx {C function} @code{void} mgl_text_xyz (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt)
-@deftypefnx {C function} @code{void} mgl_textw_xyz (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Text (@code{const mglData &}y, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Text (@code{const mglData &}y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_text_y (@code{HMGL} gr, @code{HCDT} y, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_textw_y (@code{HMGL} gr, @code{HCDT} y, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_text_xy (@code{HCDT} x, @code{HCDT} y, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_textw_xy (@code{HCDT} x, @code{HCDT} y, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_text_xyz (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_textw_xyz (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt)
 @end ifclear
-Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΡ‚Ρ€ΠΎΠΊΡƒ @var{text} Π²Π΄ΠΎΠ»ΡŒ ΠΊΡ€ΠΈΠ²ΠΎΠΉ @{@var{x}[i], @var{y}[i], @var{z}[i]@} ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ @var{fnt}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{fnt} ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹: @samp{t} Π΄Π»Ρ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Скста ΠΏΠΎΠ΄ ΠΊΡ€ΠΈΠ²ΠΎΠΉ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), ΠΈΠ»ΠΈ @samp{T} Π΄Π»Ρ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Скста Π½Π°Π΄ ΠΊΡ€ΠΈΠ²ΠΎΠΉ. Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ 1-ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=y.nx=z.nx}. Π•сли ΠΌΠ°ΡΡΠΈΠ² @var{x} Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся "автоматичСский" ΠΌΠ°ΡΡΠΈΠ² ΡΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡΠΌΠΈ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [@var{Min}.x, @var{Max}.x] (@pxref{Ranges (bounding box)}). Π•сли ΠΌΠ°ΡΡΠΈΠ² @var{z} Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся @var{z}[i] = @var{Min}.z. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{opt} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΎΠΏΡ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (@pxref{Command options}). @sref{Text sample}
+Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΡ‚Ρ€ΠΎΠΊΡƒ @var{text} Π²Π΄ΠΎΠ»ΡŒ ΠΊΡ€ΠΈΠ²ΠΎΠΉ @{@var{x}[i], @var{y}[i], @var{z}[i]@} ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ @var{fnt}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{fnt} ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹: @samp{t} Π΄Π»Ρ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Скста ΠΏΠΎΠ΄ ΠΊΡ€ΠΈΠ²ΠΎΠΉ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), ΠΈΠ»ΠΈ @samp{T} Π΄Π»Ρ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Скста Π½Π°Π΄ ΠΊΡ€ΠΈΠ²ΠΎΠΉ. Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ 1-ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=y.nx=z.nx}. Π•сли ΠΌΠ°ΡΡΠΈΠ² @var{x} Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся "автоматичСский" ΠΌΠ°ΡΡΠΈΠ² ΡΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡΠΌΠΈ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [@var{Min}.x, @var{Max}.x] (см. @ref{Ranges (bounding box)}). Π•сли ΠΌΠ°ΡΡΠΈΠ² @var{z} Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся @var{z}[i] = @var{Min}.z. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{opt} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΎΠΏΡ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (см. @ref{Command options}). @sref{Text sample}
 @end deftypefn
 
 @c ##################################################################
@@ -1327,55 +1386,55 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @cindex Colorbar
 @cindex Label
 
-Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄Π»Ρ "измСрСния" Ρ‚ΠΈΠΏΠ° ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (colorbar), ΡΠ΅Ρ‚ΠΊΡƒ ΠΏΠΎ ΠΎΡΡΠΌ, ΠΎΠ±Ρ€Π°ΠΌΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄ ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΏΠΎ ΠΎΡΡΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @pxref{Axis settings}.
+Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄Π»Ρ "измСрСния" Ρ‚ΠΈΠΏΠ° ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (colorbar), ΡΠ΅Ρ‚ΠΊΡƒ ΠΏΠΎ ΠΎΡΡΠΌ, ΠΎΠ±Ρ€Π°ΠΌΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄ ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΏΠΎ ΠΎΡΡΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΌ. @ref{Axis settings}.
 
 @anchor{axis}
-@deftypefn {MGL command} {} axis ['dir'='xyz' @code{adjust=off}]
+@deftypefn {MGL command} {} axis ['dir'='xyz' 'stl'='']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Axis (@code{const char *}dir=@code{"xyz"}, @code{bool} adjust=@code{false})
-@deftypefnx {C function} @code{void} mgl_axis (@code{HMGL} gr, @code{const char *}dir, @code{int} adjust)
+@deftypefnx {Method on @code{mglGraph}} @code{void} Axis (@code{const char *}dir=@code{"xyz"}, @code{const char *}stl=@code{""})
+@deftypefnx {C function} @code{void} mgl_axis (@code{HMGL} gr, @code{const char *}dir, @code{const char *}stl)
 @end ifclear
-РисуСт ΠΎΡΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π° Π½ΠΈΡ… (@pxref{Axis settings}) Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡΡ…, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ @var{dir}. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{_}, Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚. Π¨Ρ€ΠΈΡ„Ρ‚ ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ @code{SetFontDef()} (@pxref{Font settings}). ΠœΠ΅Ρ‚ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ "ΠΏΠΎΠ΄ΠΎΠ³Π½Π°Π½Ρ‹" Π΅ΡΠ»ΠΈ @var{adjust}=@code{true} (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ @code{AdjustTicks()}).
+РисуСт ΠΎΡΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π° Π½ΠΈΡ… (см. @ref{Axis settings}) Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡΡ… @samp{xyz}, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ @var{dir}. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{_}, Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{AKDTVISO}, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΡΡ‚Ρ€Π΅Π»ΠΊΠ° Π½Π° ΠΊΠΎΠ½Ρ†Π΅ ΠΎΡΠΈ. Π‘Ρ‚ΠΈΠ»ΡŒ ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈ ΠΎΡΠΈ(Π΅ΠΉ) Π·Π°Π΄Π°Π΅Ρ‚ся ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ @var{stl}. @sref{Axis and ticks}
 @end deftypefn
 
 @anchor{colorbar}
-@deftypefn {MGL command} {} colorbar ['sch'='' @code{pos=0}]
+@deftypefn {MGL command} {} colorbar ['sch'='']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const char *}sch=@code{""}, @code{int} pos=@code{0})
-@deftypefnx {C function} @code{void} mgl_colorbar (@code{HMGL} gr, @code{const char *}sch, @code{int} pos)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Colorbar (@code{const char *}sch=@code{""})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_colorbar (@code{HMGL} gr, @code{const char *}sch)
 @end ifclear
-РиÑ\81Γ‘\83СÑ\82 ΓΒΏΓΒΎΓΒ»ΓΒΎΓ‘\81Γ‘\83 Γ‘\81ооÑ\82вСÑ\82Γ‘\81Γ‘\82виÑ\8f Γ‘\86вСÑ\82а ΓΒΈ Γ‘\87иÑ\81ловÑ\8bΓ‘\85 ΓΒ·ΓΒ½ΓΒ°Γ‘\87Сний (colorbar) ΓΒ΄ΓΒ»Γ‘\8f Γ‘\86вСÑ\82овой Γ‘\81Γ‘\85СмÑ\8b @var{sch} (иÑ\81полÑ\8cзÑ\83СÑ\82Γ‘\81Γ‘\8f Γ‘\82СкÑ\83Γ‘\89аÑ\8f ΓΒ΄ΓΒ»Γ‘\8f @code{sch=""}) Γ‘\81 ΓΒΊΓ‘\80аÑ\8e ΓΒΎΓ‘\82 ΓΒ³Γ‘\80аÑ\84ика. Γ\9fаÑ\80амСÑ\82Γ‘\80 @var{pos} ΓΒ·ΓΒ°ΓΒ΄ΓΒ°ΓΒ΅Γ‘\82 ΓΒΌΓΒ΅Γ‘\81Γ‘\82ополоТСниС: @samp{0} - Γ‘\81пÑ\80ава (по Γ‘\83молÑ\87аниÑ\8e), @samp{1} - Γ‘\81лСва, @samp{2} - Γ‘\81вСÑ\80Γ‘\85Γ‘\83, @samp{3} - Γ‘\81низÑ\83. Γ\95Γ‘\81ли Γ‘\81Γ‘\82Γ‘\80ока @var{sch} Γ‘\81одСÑ\80ТиÑ\82 @samp{<>^_}, Γ‘\82о ΓΒΏΓΒ°Γ‘\80амСÑ\82Γ‘\80 @var{pos} ΓΒΎΓΒΏΓ‘\80СдСлÑ\8fСÑ\82Γ‘\81Γ‘\8f ΓΒΊΓΒ°ΓΒΊ: @code{pos=0} ΓΒ΄ΓΒ»Γ‘\8f @samp{>} (Γ‘\81пÑ\80ава), @code{pos=1} ΓΒ΄ΓΒ»Γ‘\8f @samp{<} (Γ‘\81лСва), @code{pos=2} ΓΒ΄ΓΒ»Γ‘\8f @samp{^} (Γ‘\81вСÑ\80Γ‘\85Γ‘\83), @code{pos=3} ΓΒ΄ΓΒ»Γ‘\8f @samp{_} (Γ‘\81низÑ\83). Γ\95Γ‘\81ли Γ‘\81Γ‘\82Γ‘\80ока Γ‘\81одСÑ\80ТиÑ\82 @samp{A}, Γ‘\82о ΓΒΈΓ‘\81полÑ\8cзÑ\83Γ‘\8eΓ‘\82Γ‘\81Γ‘\8f ΓΒ°ΓΒ±Γ‘\81олÑ\8eΓ‘\82нÑ\8bС ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82Γ‘\8b (оÑ\82ноÑ\81иÑ\82СлÑ\8cно Γ‘\80иÑ\81Γ‘\83нка). @sref{Dens sample}
+РиÑ\81Γ‘\83СÑ\82 ΓΒΏΓΒΎΓΒ»ΓΒΎΓ‘\81Γ‘\83 Γ‘\81ооÑ\82вСÑ\82Γ‘\81Γ‘\82виÑ\8f Γ‘\86вСÑ\82а ΓΒΈ Γ‘\87иÑ\81ловÑ\8bΓ‘\85 ΓΒ·ΓΒ½ΓΒ°Γ‘\87Сний (colorbar) ΓΒ΄ΓΒ»Γ‘\8f Γ‘\86вСÑ\82овой Γ‘\81Γ‘\85СмÑ\8b @var{sch} (иÑ\81полÑ\8cзÑ\83СÑ\82Γ‘\81Γ‘\8f Γ‘\82СкÑ\83Γ‘\89аÑ\8f ΓΒ΄ΓΒ»Γ‘\8f @code{sch=""}) Γ‘\81 ΓΒΊΓ‘\80аÑ\8e ΓΒΎΓ‘\82 ΓΒ³Γ‘\80аÑ\84ика. Γ\95Γ‘\81ли Γ‘\81Γ‘\82Γ‘\80ока @var{sch} Γ‘\81одСÑ\80ТиÑ\82 @samp{<>^_}, Γ‘\82о ΓΒΏΓΒΎΓΒ»ΓΒΎΓΒΆΓΒ΅ΓΒ½ΓΒΈΓΒ΅ ΓΒ²Γ‘\8bбиÑ\80аСÑ\82Γ‘\81Γ‘\8f: @samp{>} -- Γ‘\81пÑ\80ава, @samp{<} -- Γ‘\81лСва, @samp{^} -- Γ‘\81вСÑ\80Γ‘\85Γ‘\83, @samp{_} -- Γ‘\81низÑ\83. Γ\95Γ‘\81ли Γ‘\81Γ‘\82Γ‘\80ока Γ‘\81одСÑ\80ТиÑ\82 @samp{A}, Γ‘\82о ΓΒΈΓ‘\81полÑ\8cзÑ\83Γ‘\8eΓ‘\82Γ‘\81Γ‘\8f ΓΒ°ΓΒ±Γ‘\81олÑ\8eΓ‘\82нÑ\8bС ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82Γ‘\8b (оÑ\82ноÑ\81иÑ\82СлÑ\8cно Γ‘\80иÑ\81Γ‘\83нка). @sref{Colorbars}
 @end deftypefn
 
-@deftypefn {MGL command} {} colorbar vdat ['sch'='' @code{pos=0}]
+@deftypefn {MGL command} {} colorbar vdat ['sch'='']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch=@code{""}, @code{int} pos=@code{0})
-@deftypefnx {C function} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{HCDT} v, @code{const char *}sch, @code{int} pos)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch=@code{""})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{HCDT} v, @code{const char *}sch)
 @end ifclear
 ΠΠ½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ, Π½ΠΎ Π΄Π»Ρ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΡΡ…Π΅ΠΌΡ‹ Π±Π΅Π· ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ Ρ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡΠΌΠΈ @var{v}. @sref{ContD sample}
 @end deftypefn
 
-@deftypefn {MGL command} {} colorbar 'sch' @code{pos x y w h}
+@deftypefn {MGL command} {} colorbar 'sch' @code{x y [w=1 h=1]}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const char *}sch, @code{int} pos, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
-@deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{int} pos, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
-@deftypefnx {C function} @code{void} mgl_colorbar_ext (@code{HMGL} gr, @code{const char *}sch, @code{int} pos, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
+@deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const char *}sch, @code{float} x, @code{float} y, @code{float} w=@code{1}, @code{float} h=@code{1})
+@deftypefnx {C function} @code{void} mgl_colorbar_ext (@code{HMGL} gr, @code{const char *}sch, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
 @end ifclear
 ΠΠ½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ, Π½ΠΎ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ ΠΌΠ΅ΡΡ‚Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° @{@var{x}, @var{y}@} (ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [0,1]). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ @var{w}, @var{h} Π·Π°Π΄Π°ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ Π²Ρ‹ΡΠΎΡ‚Ρƒ colorbar.
 @end deftypefn
 
+@deftypefn {MGL command} {} colorbar vdat 'sch' @code{x y [w=1 h=1]}
 @ifclear UDAV
-@deftypefn {Method on @code{mglGraph}} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch, @code{int} pos, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
-@deftypefnx {C function} @code{void} mgl_colorbar_val_ext (@code{HMGL} gr, @code{HCDT} v, @code{const char *}sch, @code{int} pos, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
+@deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch, @code{float} x, @code{float} y, @code{float} w=@code{1}, @code{float} h=@code{1})
+@deftypefnx {C function} @code{void} mgl_colorbar_val_ext (@code{HMGL} gr, @code{HCDT} v, @code{const char *}sch, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
+@end ifclear
 ΠΠ½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ, Π½ΠΎ Π΄Π»Ρ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΡΡ…Π΅ΠΌΡ‹ Π±Π΅Π· ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ Ρ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡΠΌΠΈ @var{v}.
 @end deftypefn
-@end ifclear
 
 @anchor{grid}
 @deftypefn {MGL command} {} grid ['dir'='xyz' 'pen'='B']
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Grid (@code{const char *}dir=@code{"xyz"}, @code{const char *}pen=@code{"B"})
-@deftypefnx {C function} @code{void} mgl_axis_grid (@code{HMGL} gr, @code{const char *}dir, @code{const char *}pen)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Grid (@code{const char *}dir=@code{"xyz"}, @code{const char *}pen=@code{"B"})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_axis_grid (@code{HMGL} gr, @code{const char *}dir, @code{const char *}pen)
 @end ifclear
 Π ΠΈΡΡƒΠ΅Ρ‚ Π»ΠΈΠ½ΠΈΠΈ ΡΠ΅Ρ‚ΠΊΠΈ Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡΡ… ΠΏΠ΅Ρ€ΠΏΠ΅Π½Π΄ΠΈΠΊΡƒΠ»ΡΡ€Π½Ρ‹ΠΌ @var{dir}. Π¨Π°Π³ ΡΠ΅Ρ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠ°ΠΊ Ρƒ ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π‘Ρ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΉ Π·Π°Π΄Π°Π΅Ρ‚ся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ @var{pen} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ -- ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Ρ‚Π΅ΠΌΠ½ΠΎ ΡΠΈΠ½ΡΡ Π»ΠΈΠ½ΠΈΡ @samp{B-}).
 @end deftypefn
@@ -1383,11 +1442,11 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @anchor{box}
 @deftypefn {MGL command} {} box ['stl'='k' @code{ticks=on}]
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} Box (@code{const char *}col=@code{""}, @code{bool} ticks=@code{true})
-@deftypefnx {C function} @code{void} mgl_box (@code{HMGL} gr, @code{int} ticks)
-@deftypefnx {C function} @code{void} mgl_box_str (@code{HMGL} gr, @code{const char *}col, @code{int} ticks)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Box (@code{const char *}col=@code{""}, @code{bool} ticks=@code{true})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_box (@code{HMGL} gr, @code{int} ticks)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_box_str (@code{HMGL} gr, @code{const char *}col, @code{int} ticks)
 @end ifclear
-РисуСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄ Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{col}.
+РисуСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄ Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{col}. Π•сли @var{col} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{@@}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹Π΅ Π·Π°Π΄Π½ΠΈΠ΅ Π³Ρ€Π°Π½ΠΈ. ΠŸΡ€ΠΈ ΡΡ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Π΄Π»Ρ Π³Ρ€Π°Π½Π΅ΠΉ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡΠ²Π΅Ρ‚Π»ΠΎ ΠΆΡ‘Π»Ρ‚Ρ‹ΠΉ), Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π΄Π»Ρ Ρ€Ρ‘Π±Π΅Ρ€ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ.
 @end deftypefn
 
 @anchor{xlabel}
@@ -1417,7 +1476,7 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @cindex SetLegendBox
 @cindex SetLegendMarks
 
-Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π»Π΅Π³Π΅Π½Π΄Ρ‹ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ @ref{1D plotting}). Π—Π°ΠΏΠΈΡΡŒ Π² Π»Π΅Π³Π΅Π½Π΄Π΅ ΡΠΎΡΡ‚ΠΎΠΈΡ‚ ΠΈΠ· Π΄Π²ΡƒΡ… ΡΡ‚Ρ€ΠΎΠΊ: ΠΎΠ΄Π½Π° Π΄Π»Ρ ΡΡ‚иля Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ², Π΄Ρ€ΡƒΠ³Π°Ρ Ρ Ρ‚Скстом ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ (с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ TeX-ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄). ΠœΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ‹ ΡΡ‚Ρ€ΠΎΠΊ, ΠΈΠ»ΠΈ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠ΅ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ‹ Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ AddLegend() Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠŸΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π»Π΅Π³Π΅Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π°Π²Ρ‚оматичСски ΠΈΠ»ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ @var{fnt} ΠΈ @var{size} Π·Π°Π΄Π°ΡŽΡ‚ ΡΡ‚ΠΈΠ»ΡŒ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° (@pxref{Font settings}). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{llen} Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π»ΠΈΠ½ΠΈΠΈ. Π•Π»ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΏΡƒΡΡ‚ΠΎΠΉ, Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚Скст ΠΏΠ΅Ρ‡Π°Ρ‚аСтся Π±Π΅Π· ΠΎΡ‚ступа. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° @var{fnt} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{A}, Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π»Π΅Π³Π΅Π½Π΄Ρ‹ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ (Π° Π½Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ subplot). Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° @var{fnt} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π²ΠΎΠΊΡ€ΡƒΠ³ Π»Π΅Π³Π΅Π½Π΄Ρ‹. @sref{Legend sample}
+Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π»Π΅Π³Π΅Π½Π΄Ρ‹ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ @ref{1D plotting}). Π—Π°ΠΏΠΈΡΡŒ Π² Π»Π΅Π³Π΅Π½Π΄Π΅ ΡΠΎΡΡ‚ΠΎΠΈΡ‚ ΠΈΠ· Π΄Π²ΡƒΡ… ΡΡ‚Ρ€ΠΎΠΊ: ΠΎΠ΄Π½Π° Π΄Π»Ρ ΡΡ‚иля Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ², Π΄Ρ€ΡƒΠ³Π°Ρ Ρ Ρ‚Скстом ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ (с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ TeX-ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄). ΠœΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ‹ ΡΡ‚Ρ€ΠΎΠΊ, ΠΈΠ»ΠΈ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠ΅ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ‹ Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ AddLegend() Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠŸΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π»Π΅Π³Π΅Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π°Π²Ρ‚оматичСски ΠΈΠ»ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ @var{fnt} ΠΈ @var{size} Π·Π°Π΄Π°ΡŽΡ‚ ΡΡ‚ΠΈΠ»ΡŒ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° (см. @ref{Font settings}). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{llen} Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π»ΠΈΠ½ΠΈΠΈ. Π•Π»ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΏΡƒΡΡ‚ΠΎΠΉ, Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚Скст ΠΏΠ΅Ρ‡Π°Ρ‚аСтся Π±Π΅Π· ΠΎΡ‚ступа. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° @var{fnt} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{A}, Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π»Π΅Π³Π΅Π½Π΄Ρ‹ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ (Π° Π½Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ subplot). Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° @var{fnt} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π²ΠΎΠΊΡ€ΡƒΠ³ Π»Π΅Π³Π΅Π½Π΄Ρ‹. @sref{Legend sample}
 
 @anchor{legend}
 @deftypefn {MGL command} {} legend [@code{pos=3} 'fnt'='#' @code{size=-0.8 llen=0.1}]
@@ -1425,13 +1484,13 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @deftypefnx {Method on @code{mglGraph}} @code{void} Legend (@code{int} pos=@code{0x3}, @code{const char *}fnt=@code{"#"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1})
 @deftypefnx {C function} @code{void} mgl_legend (@code{HMGL} gr, @code{int} pos, @code{const char *}fnt, @code{float} size, @code{float} llen)
 @end ifclear
-РисуСт Π»Π΅Π³Π΅Π½Π΄Ρƒ ΠΈΠ· Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Ρ… Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ @var{fnt} Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ @var{size}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{pos} Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π»Π΅Π³Π΅Π½Π΄Ρ‹: @samp{0} -- Π² Π½ΠΈΠΆΠ½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ, @samp{1} -- Π½ΠΈΠΆΠ½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ, @samp{2} -- Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ, @samp{3} -- Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ).
+РисуСт Π»Π΅Π³Π΅Π½Π΄Ρƒ ΠΈΠ· Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Ρ… Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ @var{fnt} Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ @var{size}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{pos} Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π»Π΅Π³Π΅Π½Π΄Ρ‹: @samp{0} -- Π² Π½ΠΈΠΆΠ½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ, @samp{1} -- Π½ΠΈΠΆΠ½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ, @samp{2} -- Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ, @samp{3} -- Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ). Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{fnt} ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²Π΅Ρ‚ Π΄Π»Ρ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° (1-Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚), Π΄Π»Ρ Π΅Π³ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ (2-ΠΎΠΉ Ρ†Π²Π΅Ρ‚) ΠΈ Π΄Π»Ρ Ρ‚Скста (послСдний). Π•сли ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΌΠ΅Π½Π΅Π΅ 3 Ρ†Π²Π΅Ρ‚ΠΎΠ², Ρ‚ΠΎ Ρ†Π²Π΅Ρ‚ Ρ€Ρ‘Π±Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΌ (2 ΠΈ ΠΌΠ΅Π½Π΅Π΅ Ρ†Π²Π΅Ρ‚Π°), Π° Ρ†Π²Π΅Ρ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π±Π΅Π»Ρ‹ΠΌ (1 ΠΈ ΠΌΠ΅Π½Π΅Π΅ Ρ†Π²Π΅Ρ‚Π°). ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΅ΡΠ»ΠΈ ΡΡ‚Ρ€ΠΎΠΊΠ° @var{fnt} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}.
 @end deftypefn
 
 @deftypefn {MGL command} {} legend @code{x y} ['fnt'='#' @code{size=-1 llen=0.1}]
 @ifclear UDAV
 @deftypefnx {Method on @code{mglGraph}} @code{void} Legend (@code{float} x, @code{float} y, @code{const char *}fnt=@code{"#"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1})
-@deftypefnx {C function} @code{void} mgl_legend_xy (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const char *}fnt, @code{float} size, @code{float} llen)
+@deftypefnx {C function} @code{void} mgl_legend_pos (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const char *}fnt, @code{float} size, @code{float} llen)
 @end ifclear
 Π ΠΈΡΡƒΠ΅Ρ‚ Π»Π΅Π³Π΅Π½Π΄Ρƒ ΠΈΠ· Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Ρ… Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ @var{fnt} Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ @var{size}. ΠŸΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π»Π΅Π³Π΅Π½Π΄Ρ‹ Π·Π°Π΄Π°Π΅Ρ‚ся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ @var{x}, @var{y}, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ся Π½ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [0,1].
 @end deftypefn
@@ -1444,7 +1503,7 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @deftypefnx {C function} @code{void} mgl_add_legend (@code{HMGL} gr, @code{const char *}text, @code{const char *}style)
 @deftypefnx {C function} @code{void} mgl_add_legendw (@code{HMGL} gr, @code{const wchar_t *}text, @code{const char *}style)
 @end ifclear
-ДобавляСт ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ @var{text} ΠΊΡ€ΠΈΠ²ΠΎΠΉ ΡΠΎ ΡΡ‚ΠΈΠ»Π΅ΠΌ @var{style} (@pxref{Line styles}) Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ² Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π»Π΅Π³Π΅Π½Π΄Ρ‹.
+ДобавляСт ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ @var{text} ΠΊΡ€ΠΈΠ²ΠΎΠΉ ΡΠΎ ΡΡ‚ΠΈΠ»Π΅ΠΌ @var{style} (см. @ref{Line styles}) Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ² Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π»Π΅Π³Π΅Π½Π΄Ρ‹.
 @end deftypefn
 
 @anchor{clearlegend}
@@ -1459,8 +1518,8 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @anchor{legendmarks}
 @deftypefn {MGL command} {} legendmarks @code{val}
 @ifclear UDAV
-@deftypefnx {Method on @code{mglGraph}} @code{void} SetLegendMarks (@code{int} num)
-@deftypefnx {C function} @code{void} mgl_set_legend_marks (@code{HMGL} gr, @code{int} num)
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} SetLegendMarks (@code{int} num)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_set_legend_marks (@code{HMGL} gr, @code{int} num)
 @end ifclear
 Π—Π°Π΄Π°Π΅Ρ‚ Ρ‡ΠΈΡΠ»ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² Π² Π»Π΅Π³Π΅Π½Π΄Π΅. ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ 1 ΠΌΠ°Ρ€ΠΊΠ΅Ρ€.
 @end deftypefn
@@ -1469,616 +1528,569 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @node 1D plotting, 2D plotting, Legend, MathGL core
 @section 1D Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ
 
-Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΡ‚роят Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… (1D) ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΌΠ°ΡΡΠΈΠ²Ρ‹, Π·Π°Π²ΠΈΡΡΡ‰ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° (индСкса) ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΊΡ€ΠΈΠ²ΠΎΠΉ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСской Ρ„ΠΎΡ€ΠΌΠ΅ @{x(i),y(i),z(i)@}, i=1...n. Π•ΡΡ‚ΡŒ 5 ΠΎΡΠ½ΠΎΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² 1D Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ²: Π»ΠΈΠ½ΠΈΡ (Plot), Π»ΠΈΠ½ΠΈΡ Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ (Area), ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠΈ (Step), ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ (Bars, Barh) ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ (Stem). Π’сС ΡΡ‚ΠΈ Ρ‚ΠΈΠΏΡ‹ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ ΠΈΠ½Ρ‚СрфСйс. Π•ΡΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΠΈ Π΄Π»Ρ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΈ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ. Π’ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΠ»ΡƒΡ‡Π°Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°. Π‘Ρ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ся ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π•сли ΠΎΠ½Π° Ρ€Π°Π²Π½Π° "", Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏΠΎΠ² Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠ½Ρ‚СрфСйс ΠΈ Π²ΠΈΠ΄: ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ ΠΊΡ€ΠΈΠ²ΠΎΠΉ (Torus), Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° (Chart), Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡˆΠΈΠ±ΠΊΠΈ (Error), ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (Mark), Ρ‚Ρ€ΡƒΠ±ΠΊΠ°ΠΌΠΈ (Tube) ΠΈ Ρ‚.Π΄. @xref{Line styles}. @sref{1D plot sample}
-
-@menu
-* Plot::
-* Radar::
-* Tens::
-* Area::
-* Region::
-* Stem::
-* Bars::
-* Barh::
-* Chart::
-* Step::
-* Torus::
-* Tube::
-* Mark::
-* TextMark::
-* Error::
-* BoxPlot::
-@end menu
-
-@c ==================================================================
-@node Plot, Radar, , 1D plotting
-@subsection Plot
 @cindex Plot
-
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Π»ΠΎΠΌΠ°Π½Π½ΡƒΡŽ Π»ΠΈΠ½ΠΈΡŽ ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ. Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ @strong{Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²} Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=y.nx=z.nx}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Area}, @ref{Step}, @ref{Stem}, @ref{Tube}, @ref{Mark}, @ref{Error}, @ref{Belt}, @ref{Tens}. @sref{Plot sample}
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Plot (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_plot_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
-РисуСт Π² ΠΏΡ€ΠΎΡΡ‚ранствС Π»ΠΈΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i], @var{z}[i]@}.
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Plot (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_plot_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen)
-РисуСт Π»ΠΈΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}).
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Plot (@code{const mglData &}y, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_plot (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}pen)
-РисуСт Π»ΠΈΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}), Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{x}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x].
-@end deftypefn
-
-@c ==================================================================
-@node Radar, Tens, Plot, 1D plotting
-@subsection Radar
 @cindex Radar
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Radar (@code{const mglData &}a, @code{const char *}pen=@code{""}, @code{float} r=@code{-1})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_radar (@code{HMGL} gr, @code{const HMDT} a, @code{const char *}pen, @code{float} r)
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ radar chart, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΡΠΎΠ±ΠΎΠΉ Π»ΠΎΠΌΠ°Π½Π½ΡƒΡŽ Ρ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ Π½Π° Ρ€Π°Π΄ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π»ΠΈΠ½ΠΈΡΡ… (Ρ‚ΠΈΠΏΠ° Π»ΠΎΠΌΠ°Π½Π½ΠΎΠΉ Π² ΠΏΠΎΠ»ΡΡ€Π½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ…). Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{r} Π·Π°Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡΠ΄Π²ΠΈΠ³ Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‚.Π΅. ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся @var{a}+@var{r} Π²ΠΌΠ΅ΡΡ‚ΠΎ @var{a}). Π•сли @code{r<0}, Ρ‚ΠΎ @code{r=max(0, -min(a)}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). Π•сли @var{pen} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{#}, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся "сСтка" (Ρ€Π°Π΄ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΊΡ€ΡƒΠ³ Π΄Π»Ρ @var{r}). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Plot}. @sref{Radar sample}
-@end deftypefn
-
-@c ==================================================================
-@node Tens, Area, Radar, 1D plotting
-@subsection Tens
 @cindex Tens
-
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Π»ΠΎΠΌΠ°Π½Π½ΡƒΡŽ Π»ΠΈΠ½ΠΈΡŽ ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ Ρ Ρ†Π²Π΅Ρ‚ΠΎΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡ‹ΠΌ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ @var{c} (Ρ‚ΠΈΠΏΠ° Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π°Ρ‚яТСний). Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ @strong{Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²} Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=y.nx=z.nx=c.nx}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ (@pxref{Color scheme}) ΠΈ ΡΡ‚ΠΈΠ»ΡŒ ΠΈ/ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Ρƒ Π»ΠΈΠ½ΠΈΠΈ (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΡΡ…Π΅ΠΌΠΎΠΉ. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Plot}, @ref{Mesh}, @ref{Fall}. @sref{Tens sample}
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Tens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_tens_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}pen)
-РисуСт Π² ΠΏΡ€ΠΎΡΡ‚ранствС Π»ΠΈΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i], @var{z}[i]@} Ρ Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{c}[i].
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Tens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}c, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_tens_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} c, @code{const char *}pen)
-РисуСт Π»ΠΈΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}) Ρ Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{c}[i].
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Tens (@code{const mglData &}y, @code{const mglData &}c, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_tens (@code{HMGL} gr, @code{const HMDT} y, @code{const HMDT} c, @code{const char *}pen)
-РисуСт Π»ΠΈΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}) Ρ Ρ†Π²Π΅Ρ‚ΠΎΠΌ @var{c}[i], Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{x}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x].
-@end deftypefn
-
-@c ==================================================================
-@node Area, Region, Tens, 1D plotting
-@subsection Area
 @cindex Area
-
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Π»ΠΎΠΌΠ°Π½Π½ΡƒΡŽ Π»ΠΈΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΈ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Π²Π½ΠΈΠ· Π΄ΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ @strong{Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²} Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=y.nx=z.nx}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠ΅ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΠ΅ Π΅ΡΠ»ΠΈ Ρ‡ΠΈΡΠ»ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ ΡƒΠ΄Π²ΠΎΠ΅Π½Π½ΠΎΠΌΡƒ Ρ‡ΠΈΡΠ»Ρƒ ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Π΄Π»Ρ ΠΏΠΎΡΡ‚роСния. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{a}, Ρ‚ΠΎ Π»ΠΈΠ½ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся ΠΎΠ΄Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄Ρ€ΡƒΠ³ΠΎΠΉ (с ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ) -- Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡ„Ρ„Π΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ @code{y.CumSum("y");} ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ΠΌ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Plot}, @ref{Bars}, @ref{Stem}. @sref{Area sample}
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_area_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
-РисуСт Π² ΠΏΡ€ΠΎΡΡ‚ранствС Π»ΠΈΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i], @var{z}[i]@} ΠΈ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Π²Π½ΠΈΠ· Π΄ΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z} = Org.z.
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_area_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen)
-РисуСт Π»ΠΈΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}) ΠΈ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Π΄ΠΎ ΠΏΡ€ΡΠΌΠΎΠΉ @var{y} = Org.y.
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Area (@code{const mglData &}y, @code{const char *}pen=@code{""}, @code{bool} sum=@code{false})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_area (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}pen)
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_area_s (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}pen)
-РисуСт Π»ΠΈΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}) ΠΈ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Π΄ΠΎ ΠΏΡ€ΡΠΌΠΎΠΉ @var{y} = Org.y, Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{x}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x]. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{sum} Π·Π°Π΄Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π»ΠΈΠ½ΠΈΠΉ ΠΎΠ΄Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄Ρ€ΡƒΠ³ΠΎΠΉ (с ΡΡƒΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ). Π—Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡ„Ρ„Π΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ @code{y.CumSum("y");} ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ΠΌ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°.
-@end deftypefn
-
-@c ==================================================================
-@node Region, Stem, Area, 1D plotting
-@subsection Region
 @cindex Region
-
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ 2 ΠΊΡ€ΠΈΠ²Ρ‹ΠΌΠΈ. Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ @strong{Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²} Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=y1.nx=y2.nx} ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{y1}, @var{y2} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠ΅ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΠ΅ Π΅ΡΠ»ΠΈ Ρ‡ΠΈΡΠ»ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ ΡƒΠ΄Π²ΠΎΠ΅Π½Π½ΠΎΠΌΡƒ Ρ‡ΠΈΡΠ»Ρƒ ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Π΄Π»Ρ ΠΏΠΎΡΡ‚роСния. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Area}, @ref{Bars}, @ref{Stem}. @sref{Region sample}
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Region (@code{const mglData &}x, @code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN}, @code{bool} inside=@code{true})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_region_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y1, @code{const HMDT} y2, @code{const char *}pen, @code{int} inside)
-Π—Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΡ€ΠΈΠ²Ρ‹ΠΌΠΈ @{@var{x}[i], @var{y1}[i]@} ΠΈ @{@var{x}[i], @var{y2}[i]@} ΠΏΡ€ΠΈ z=@var{zVal}. ΠŸΡ€ΠΈ  @code{inside=off} Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ y1<y<y2, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Π°Ρ‰Π΅Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ y2<y<y1.
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Region (@code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN}, @code{bool} inside=@code{true})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_region (@code{HMGL} gr, @code{const HMDT} y1, @code{const HMDT} y2, @code{const char *}pen, @code{int} inside)
-Π—Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΡ€ΠΈΠ²Ρ‹ΠΌΠΈ @{@var{x}[i], @var{y1}[i]@} ΠΈ @{@var{x}[i], @var{y2}[i]@} ΠΏΡ€ΠΈ z=@var{zVal}, Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{x}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x].
-@end deftypefn
-
-@c ==================================================================
-@node Stem, Bars, Region, 1D plotting
-@subsection Stem
 @cindex Stem
-
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄ΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ @strong{Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²} Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=y.nx=z.nx}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Area}, @ref{Bars}, @ref{Plot}, @ref{Mark}. @sref{Stem sample}
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Stem (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_stem_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
-РисуСт Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i], @var{z}[i]@} Π²Π½ΠΈΠ· Π΄ΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z} = Org.z.
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Stem (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_stem_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen)
-РисуСт Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i]@} Π΄ΠΎ @var{y} = Org.y Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}).
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Stem (@code{const mglData &}y, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_stem (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}pen)
-РисуСт Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i]@} Π΄ΠΎ @var{y} = Org.y Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}), Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{x}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x].
-@end deftypefn
-
-@c ==================================================================
-@node Bars, Barh, Stem, 1D plotting
-@subsection Bars
 @cindex Bars
-
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΎΡΡ‹ (ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ) ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄ΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ @strong{Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²} Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=y.nx=z.nx}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{a}, Ρ‚ΠΎ Π»ΠΈΠ½ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся ΠΎΠ΄Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{f}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ‚ΠΈΠΏΠ° waterfall Π΄Π»Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΡƒΠΌΡƒΠ»ΡΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡ„Ρ„Π΅ΠΊΡ‚Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠœΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Π° Π΄Π»Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΅ΡΠ»ΠΈ Ρ‡ΠΈΡΠ»ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ ΡƒΠ΄Π²ΠΎΠ΅Π½Π½ΠΎΠΌΡƒ Ρ‡ΠΈΡΠ»Ρƒ ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Π΄Π»Ρ ΠΏΠΎΡΡ‚роСния. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Barh}, @ref{Area}, @ref{Stem}, @ref{Chart}, @ref{Default sizes}. @sref{Bars sample}
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Bars (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_bars_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
-РисуСт Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΎΡΡ‹ ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i], @var{z}[i]@} Π²Π½ΠΈΠ· Π΄ΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z} = Org.z.
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Bars (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_bars_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen)
-РисуСт Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΎΡΡ‹ ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i]@} Π΄ΠΎ @var{y} = Org.y Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}).
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Bars (@code{const mglData &}y, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_bars (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}pen)
-РисуСт Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΎΡΡ‹ ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i]@} Π΄ΠΎ @var{y} = Org.y Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}), Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{x}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x].
-@end deftypefn
-
-@c ==================================================================
-@node Barh, Chart, Bars, 1D plotting
-@subsection Barh
 @cindex Barh
+@cindex Chart
+@cindex Step
+@cindex Torus
+@cindex Tube
+@cindex Mark
+@cindex TextMark
+@cindex Error
+@cindex BoxPlot
+@cindex Candle
+@cindex Tape
+@cindex Label
+@cindex Cones
 
-ЀÑ\83нкÑ\86ии Γ‘\80иÑ\81Γ‘\83Γ‘\8eΓ‘\82 ΓΒ³ΓΒΎΓ‘\80изонÑ\82алÑ\8cнÑ\8bС ΓΒΏΓΒΎΓΒ»ΓΒΎΓ‘\81Γ‘\8b (пÑ\80Γ‘\8fмоÑ\83голÑ\8cники) ΓΒΈΓΒ· Γ‘\82оÑ\87Ск ΓΒ΄ΓΒΎ ΓΒΏΓΒ»ΓΒΎΓ‘\81коÑ\81Γ‘\82и ΓΒΎΓ‘\81Сй ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82. Γ\93Γ‘\80аÑ\84ик Γ‘\80иÑ\81Γ‘\83СÑ\82Γ‘\81Γ‘\8f ΓΒ΄ΓΒ»Γ‘\8f ΓΒΊΓΒ°ΓΒΆΓΒ΄ΓΒΎΓΒΉ Γ‘\81Γ‘\82Γ‘\80оки ΓΒ΅Γ‘\81ли ΓΒΎΓΒ΄ΓΒΈΓΒ½ ΓΒΈΓΒ· ΓΒΌΓΒ°Γ‘\81Γ‘\81ивов ΓΒΌΓΒ°Γ‘\82Γ‘\80иÑ\86а. ΓΒ ΓΒ°ΓΒ·ΓΒΌΓΒ΅Γ‘\80 ΓΒΏΓΒΎ 1-ой ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82С @strong{долТСн ΓΒ±Γ‘\8bΓ‘\82Γ‘\8c ΓΒΎΓΒ΄ΓΒΈΓΒ½ΓΒ°ΓΒΊΓΒΎΓΒ²} ΓΒ΄ΓΒ»Γ‘\8f ΓΒ²Γ‘\81СÑ\85 ΓΒΌΓΒ°Γ‘\81Γ‘\81ивов @code{x.nx=y.nx=z.nx}. ΓΒ‘Γ‘\82Γ‘\80ока @var{pen} ΓΒ·ΓΒ°ΓΒ΄ΓΒ°ΓΒ΅Γ‘\82 Γ‘\86вСÑ\82 ΓΒΈ Γ‘\81Γ‘\82илÑ\8c ΓΒ»ΓΒΈΓΒ½ΓΒΈΓΒΈ ΓΒΈ ΓΒΌΓΒ°Γ‘\80кСÑ\80ов (@pxref{Line styles}). Γ\9fо Γ‘\83молÑ\87аниÑ\8e (@code{pen=""}) ΓΒΈΓ‘\81полÑ\8cзÑ\83СÑ\82Γ‘\81Γ‘\8f Γ‘\81плоÑ\88наÑ\8f ΓΒ»ΓΒΈΓΒ½ΓΒΈΓ‘\8f Γ‘\81 Γ‘\82СкÑ\83Γ‘\89им Γ‘\86вСÑ\82ом ΓΒΈΓΒ· ΓΒΏΓΒ°ΓΒ»ΓΒΈΓ‘\82Γ‘\80Γ‘\8b (@pxref{Palette and colors}). Γ\95Γ‘\81ли Γ‘\81Γ‘\82Γ‘\80ока Γ‘\81одСÑ\80ТиÑ\82 Γ‘\81имвол @samp{a}, Γ‘\82о ΓΒ»ΓΒΈΓΒ½ΓΒΈΓΒΈ Γ‘\80иÑ\81Γ‘\83Γ‘\8eΓ‘\82Γ‘\81Γ‘\8f ΓΒΎΓΒ΄ΓΒ½ΓΒ° ΓΒΏΓΒΎΓΒ²ΓΒ΅Γ‘\80Γ‘\85 ΓΒ΄Γ‘\80Γ‘\83гой. Γ\95Γ‘\81ли Γ‘\81Γ‘\82Γ‘\80ока Γ‘\81одСÑ\80ТиÑ\82 Γ‘\81имвол @samp{f}, Γ‘\82о Γ‘\80иÑ\81Γ‘\83СÑ\82Γ‘\81Γ‘\8f ΓΒ³Γ‘\80аÑ\84ик Γ‘\82ипа waterfall ΓΒ΄ΓΒ»Γ‘\8f ΓΒΎΓΒΏΓ‘\80СдСлСниÑ\8f ΓΒΊΓ‘\83мÑ\83лÑ\8fΓ‘\82ивного Γ‘\8dΓ‘\84Γ‘\84СкÑ\82а ΓΒΏΓΒΎΓ‘\81лСдоваÑ\82СлÑ\8cноÑ\81Γ‘\82и ΓΒΏΓΒΎΓΒ»ΓΒΎΓΒΆΓΒΈΓ‘\82СлÑ\8cнÑ\8bΓ‘\85 ΓΒΈ ΓΒΎΓ‘\82Γ‘\80иÑ\86аÑ\82СлÑ\8cнÑ\8bΓ‘\85 ΓΒ·ΓΒ½ΓΒ°Γ‘\87Сний. Γ\9cоТно ΓΒΈΓ‘\81полÑ\8cзоваÑ\82Γ‘\8c Γ‘\80азнÑ\8bС Γ‘\86вСÑ\82а ΓΒ΄ΓΒ»Γ‘\8f ΓΒΏΓΒΎΓΒ»ΓΒΎΓΒΆΓΒΈΓ‘\82СлÑ\8cнÑ\8bΓ‘\85 ΓΒΈ ΓΒΎΓ‘\82Γ‘\80иÑ\86аÑ\82СлÑ\8cнÑ\8bΓ‘\85 ΓΒ·ΓΒ½ΓΒ°Γ‘\87Сний ΓΒ΅Γ‘\81ли Γ‘\87иÑ\81ло Γ‘\83казаннÑ\8bΓ‘\85 Γ‘\86вСÑ\82ов Γ‘\80авно Γ‘\83двоСнномÑ\83 Γ‘\87иÑ\81лÑ\83 ΓΒΊΓ‘\80ивÑ\8bΓ‘\85 ΓΒ΄ΓΒ»Γ‘\8f ΓΒΏΓΒΎΓ‘\81Γ‘\82Γ‘\80оСниÑ\8f. ΓΒ‘м. Γ‘\82акТС @ref{Barh}, @ref{Default sizes}. @sref{Barh sample}
+ЭÑ\82и Γ‘\84Γ‘\83нкÑ\86ии Γ‘\81Γ‘\82Γ‘\80оÑ\8fΓ‘\82 ΓΒ³Γ‘\80аÑ\84ики ΓΒ΄ΓΒ»Γ‘\8f ΓΒΎΓΒ΄ΓΒ½ΓΒΎΓΒΌΓΒ΅Γ‘\80нÑ\8bΓ‘\85 (1D) ΓΒΌΓΒ°Γ‘\81Γ‘\81ивов. Γ\9eдномСÑ\80нÑ\8bми Γ‘\81Γ‘\87иÑ\82аÑ\8eΓ‘\82Γ‘\81Γ‘\8f ΓΒΌΓΒ°Γ‘\81Γ‘\81ивÑ\8b, ΓΒ·ΓΒ°ΓΒ²ΓΒΈΓ‘\81Γ‘\8fΓ‘\89иС Γ‘\82олÑ\8cко ΓΒΎΓ‘\82 ΓΒΎΓΒ΄ΓΒ½ΓΒΎΓΒ³ΓΒΎ ΓΒΏΓΒ°Γ‘\80амСÑ\82Γ‘\80а (индСкÑ\81а) ΓΒΏΓΒΎΓΒ΄ΓΒΎΓΒ±ΓΒ½ΓΒΎ ΓΒΊΓ‘\80ивой ΓΒ² ΓΒΏΓΒ°Γ‘\80амСÑ\82Γ‘\80иÑ\87СÑ\81кой Γ‘\84оÑ\80мС @{x(i),y(i),z(i)@}, i=1...n. Γ\9fо Γ‘\83молÑ\87аниÑ\8e (СÑ\81ли ΓΒΎΓ‘\82Γ‘\81Γ‘\83Γ‘\82Γ‘\81Γ‘\82вÑ\83Γ‘\8eΓ‘\82) ΓΒ·ΓΒ½ΓΒ°Γ‘\87СниÑ\8f @var{x}[i] Γ‘\80авно Γ‘\80аÑ\81пÑ\80СдСлСнÑ\8b ΓΒ² ΓΒ΄ΓΒΈΓΒ°ΓΒΏΓΒ°ΓΒ·ΓΒΎΓΒ½ΓΒ΅ ΓΒΎΓ‘\81и Γ‘\85, ΓΒΈ @var{z}[i]=@var{Min}.z. Γ\93Γ‘\80аÑ\84ики Γ‘\80иÑ\81Γ‘\83Γ‘\8eΓ‘\82Γ‘\81Γ‘\8f ΓΒ΄ΓΒ»Γ‘\8f ΓΒΊΓΒ°ΓΒΆΓΒ΄ΓΒΎΓΒΉ Γ‘\81Γ‘\82Γ‘\80оки ΓΒΌΓΒ°Γ‘\81Γ‘\81ива ΓΒ΄ΓΒ°ΓΒ½ΓΒ½Γ‘\8bΓ‘\85 ΓΒ΅Γ‘\81ли ΓΒΎΓΒ½ ΓΒ΄ΓΒ²Γ‘\83мСÑ\80нÑ\8bй. ΓΒ ΓΒ°ΓΒ·ΓΒΌΓΒ΅Γ‘\80 ΓΒΏΓΒΎ 1-ой ΓΒΊΓΒΎΓΒΎΓ‘\80динаÑ\82С @strong{долТСн ΓΒ±Γ‘\8bΓ‘\82Γ‘\8c ΓΒΎΓΒ΄ΓΒΈΓΒ½ΓΒ°ΓΒΊΓΒΎΓΒ²} ΓΒ΄ΓΒ»Γ‘\8f ΓΒ²Γ‘\81СÑ\85 ΓΒΌΓΒ°Γ‘\81Γ‘\81ивов @code{x.nx=y.nx=z.nx}.
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Barh (@code{const mglData &}y, @code{const mglData &}v, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_barh_xy (@code{HMGL} gr, @code{const HMDT} y, @code{const HMDT} v, @code{const char *}pen)
-РисуСт Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΎΡΡ‹ ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{v}[i], @var{y}[i]@} Π΄ΠΎ @var{x} = Org.x Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}).
-@end deftypefn
+Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² (см. @ref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (см. @ref{Palette and colors}). Π‘ΠΈΠΌΠ²ΠΎΠ» @samp{!} Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ Π·Π°Π΄Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π΅ Π΄Π»Ρ Π²ΡΠ΅ΠΉ ΠΊΡ€ΠΈΠ²ΠΎΠΉ, ΠΊΠ°ΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ). Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{opt} Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (см. @ref{Command options}). @sref{1D samples}
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Barh (@code{const mglData &}v, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_barh (@code{HMGL} gr, @code{const HMDT} v, @code{const char *}pen)
-РисуСт Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΎΡΡ‹ ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{v}[i], @var{y}[i]@} Π΄ΠΎ @var{x} = Org.x Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}), Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{y}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.y, @var{Max}.y].
+@anchor{plot}
+@deftypefn {MGL command} {} plot ydat ['stl'='']
+@deftypefnx {MGL command} {} plot xdat ydat ['stl'='']
+@deftypefnx {MGL command} {} plot xdat ydat zdat ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Plot (@code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Plot (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Plot (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_plot (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_plot_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_plot_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Π»ΠΎΠΌΠ°Π½Π½ΡƒΡŽ Π»ΠΈΠ½ΠΈΡŽ ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{area}, @ref{step}, @ref{stem}, @ref{tube}, @ref{mark}, @ref{error}, @ref{belt}, @ref{tens}, @ref{tape}. @sref{Plot sample}
 @end deftypefn
 
-@c ==================================================================
-@node Chart, Step, Barh, 1D plotting
-@subsection Chart
-@cindex Chart
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Chart (@code{const mglData &}a, @code{const char *}col=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_chart (@code{HMGL} gr, @code{const HMDT} a, @code{const char *}col)
-РисуСт Ρ†Π²Π΅Ρ‚Π½Ρ‹Π΅ ΠΏΠΎΠ»ΠΎΡΡ‹ (пояса) Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π°Π½Π½Ρ‹Ρ… @var{a}. Π§ΠΈΡΠ»ΠΎ ΠΏΠΎΠ»ΠΎΡ Ρ€Π°Π²Π½ΠΎ Ρ‡ΠΈΡΠ»Ρƒ ΡΡ‚Ρ€ΠΎΠΊ @var{a} (Ρ€Π°Π²Π½ΠΎ @var{a.ny}). Π¦Π²Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΡ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ ΠΌΠ΅Π½ΡΠ΅Ρ‚ся ΠΈΠ· Ρ†Π²Π΅Ρ‚ΠΎΠ² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² @var{col} ΠΈΠ»ΠΈ Π² ΠΏΠ°Π»ΠΈΡ‚Ρ€Π΅ (@pxref{Palette and colors}). ΠŸΡ€ΠΎΠ±Π΅Π» Π² Ρ†Π²Π΅Ρ‚Π°Ρ… ΡΠΎΠΎΡ‚вСтствуСт ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΌΡƒ "Ρ†Π²Π΅Ρ‚Ρƒ", Ρ‚.Π΅. Π΅ΡΠ»ΠΈ @var{col} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΏΡ€ΠΎΠ±Π΅Π»(Ρ‹), Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎΠ»ΠΎΡΠ° Π½Π΅ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся. Π¨ΠΈΡ€ΠΈΠ½Π° ΠΏΠΎΠ»ΠΎΡΡ‹ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π° Π² @var{a}. Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΠΈΡ… ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° @var{col} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Π½ΠΈΡ†Π° ΠΏΠΎΠ»ΠΎΡ. Π“Ρ€Π°Ρ„ΠΈΠΊ Π²Ρ‹Π³Π»ΡΠ΄ΠΈΡ‚ Π»ΡƒΡ‡ΡˆΠ΅ Π² (послС Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ ΡΠΈΡΡ‚Π΅ΠΌΡ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚) ΠΈ/ΠΈΠ»ΠΈ Π² ΠΏΠΎΠ»ΡΡ€Π½ΠΎΠΉ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (становится Pie chart). @sref{Chart sample}
+@anchor{radar}
+@deftypefn {MGL command} {} radar adat ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Radar (@code{const mglData &}a, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_radar (@code{HMGL} gr, @code{HCDT} a, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ radar chart, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΡΠΎΠ±ΠΎΠΉ Π»ΠΎΠΌΠ°Π½Π½ΡƒΡŽ Ρ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ Π½Π° Ρ€Π°Π΄ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π»ΠΈΠ½ΠΈΡΡ… (Ρ‚ΠΈΠΏΠ° Π»ΠΎΠΌΠ°Π½Π½ΠΎΠΉ Π² ΠΏΠΎΠ»ΡΡ€Π½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ…). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{value} Π² ΠΎΠΏΡ†ΠΈΡΡ… @var{opt} Π·Π°Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡΠ΄Π²ΠΈΠ³ Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‚.Π΅. ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ @var{a}+@var{value} Π²ΠΌΠ΅ΡΡ‚ΠΎ @var{a}). Π•сли @var{pen} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся "сСтка" (Ρ€Π°Π΄ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{plot}. @sref{Radar sample}
 @end deftypefn
 
-
-@c ==================================================================
-@node Step, Torus, Chart, 1D plotting
-@subsection Step
-@cindex Step
-
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠΈ Π΄Π»Ρ Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΌΠ°ΡΡΠΈΠ²Π°. Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ @strong{Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²} Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=y.nx=z.nx}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Plot}, @ref{Stem}, @ref{Tile}, @ref{Boxs}. @sref{Step sample}
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Step (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_step_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
-РисуСт ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠΈ Π΄Π»Ρ Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i], @var{z}[i]@}.
+@anchor{step}
+@deftypefn {MGL command} {} step ydat ['stl'='']
+@deftypefnx {MGL command} {} step xdat ydat ['stl'='']
+@deftypefnx {MGL command} {} step xdat ydat zdat ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Step (@code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Step (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Step (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_step (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_step_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_step_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠΈ Π΄Π»Ρ Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΌΠ°ΡΡΠΈΠ²Π°. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{plot}, @ref{stem}, @ref{tile}, @ref{boxs}. @sref{Step sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Step (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_step_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen)
-РисуСт ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠΈ Π΄Π»Ρ Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}).
+@anchor{tens}
+@deftypefn {MGL command} {} tens ydat cdat ['stl'='']
+@deftypefnx {MGL command} {} tens xdat ydat cdat ['stl'='']
+@deftypefnx {MGL command} {} tens xdat ydat zdat cdat ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tens (@code{const mglData &}y, @code{const mglData &}c, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}c, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_tens (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_tens_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_tens_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Π»ΠΎΠΌΠ°Π½Π½ΡƒΡŽ Π»ΠΈΠ½ΠΈΡŽ ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ Ρ Ρ†Π²Π΅Ρ‚ΠΎΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡ‹ΠΌ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ @var{c} (Ρ‚ΠΈΠΏΠ° Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π°Ρ‚яТСний). Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ (см. @ref{Color scheme}) ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΉ ΠΈ/ΠΈΠ»ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² (см. @ref{Line styles}). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{plot}, @ref{mesh}, @ref{fall}. @sref{Tens sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Step (@code{const mglData &}y, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_step (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}pen)
-РисуСт ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠΈ Π΄Π»Ρ Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}), Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{x}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x].
+@anchor{tape}
+@deftypefn {MGL command} {} tape ydat ['stl'='']
+@deftypefnx {MGL command} {} tape xdat ydat ['stl'='']
+@deftypefnx {MGL command} {} tape xdat ydat zdat ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tape (@code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tape (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tape (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_tape (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_tape_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_tape_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Π»Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ся Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΊΡ€ΠΈΠ²ΠΎΠΉ @{@var{x}[i], @var{y}[i], @var{z}[i]@} ΠΊΠ°ΠΊ Π΅Ρ‘ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ. ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Π»Π΅Π½Ρ‚Π°(Ρ‹) Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ся Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ x-y (для @samp{x} Π² @var{pen}) ΠΈ/ΠΈΠ»ΠΈ y-z (для @samp{x} Π² @var{pen}). Π¨ΠΈΡ€ΠΈΠ½Π° Π»Π΅Π½Ρ‚ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π° @code{SetBarWidth()}. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{plot}, @ref{flow}, @ref{barwidth}. @sref{Tape sample}
 @end deftypefn
 
-@c ==================================================================
-@node Torus, Tube, Step, 1D plotting
-@subsection Torus
-@cindex Torus
-
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ ΠΊΡ€ΠΈΠ²ΠΎΠΉ @{@var{r}, @var{z}@} ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡΠΈ. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ @strong{Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²} Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{r.nx=z.nx}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Ρ†Π²Π΅Ρ‚ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Plot}, @ref{Axial}. @sref{Torus sample}
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Torus (@code{const mglData &}r, @code{const mglData &}z, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_torus (@code{HMGL} gr, @code{const HMDT} r, @code{const HMDT} z, @code{const char *}pen)
-РисуСт ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ ΠΊΡ€ΠΈΠ²ΠΎΠΉ @{@var{r}[i], @var{z}[i]@}.
+@anchor{area}
+@deftypefn {MGL command} {} area ydat ['stl'='']
+@deftypefnx {MGL command} {} area xdat ydat ['stl'='']
+@deftypefnx {MGL command} {} area xdat ydat zdat ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Area (@code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_area (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_area_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_area_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Π»ΠΎΠΌΠ°Π½Π½ΡƒΡŽ Π»ΠΈΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΈ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π΅Ρ‘ Π²Π½ΠΈΠ· Π΄ΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π“радиСнтная Π·Π°Π»ΠΈΠ²ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Π΅ΡΠ»ΠΈ Ρ‡ΠΈΡΠ»ΠΎ Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ ΡƒΠ΄Π²ΠΎΠ΅Π½Π½ΠΎΠΌΡƒ Ρ‡ΠΈΡΠ»ΠΎ ΠΊΡ€ΠΈΠ²Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{plot}, @ref{bars}, @ref{stem}, @ref{region}. @sref{Area sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Torus (@code{const mglData &}z, @code{const char *}pen=@code{""})
-РисуСт ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ ΠΊΡ€ΠΈΠ²ΠΎΠΉ @{@var{r}[i], @var{z}[i]@}, Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{r}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x].
+@anchor{region}
+@deftypefn {MGL command} {} region ydat1 ydat2 ['stl'='']
+@deftypefnx {MGL command} {} region xdat ydat1 ydat2 ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Region (@code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Region (@code{const mglData &}x, @code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_region (@code{HMGL} gr, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_region_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ 2 ΠΊΡ€ΠΈΠ²Ρ‹ΠΌΠΈ. Π“радиСнтная Π·Π°Π»ΠΈΠ²ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Π΅ΡΠ»ΠΈ Ρ‡ΠΈΡΠ»ΠΎ Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ ΡƒΠ΄Π²ΠΎΠ΅Π½Π½ΠΎΠΌΡƒ Ρ‡ΠΈΡΠ»ΠΎ ΠΊΡ€ΠΈΠ²Ρ‹Ρ…. Π•сли @var{pen} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{i}, Ρ‚ΠΎ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ y1<y<y2, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π° ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ y2<y<y1. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{area}, @ref{bars}, @ref{stem}. @sref{Region sample}
 @end deftypefn
 
-@c ==================================================================
-@node Tube, Mark, Torus, 1D plotting
-@subsection Tube
-@cindex Tube
-
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Ρ‚Ρ€ΡƒΠ±Ρƒ Ρ€Π°Π΄ΠΈΡƒΡΠ° @var{r}[i] Π²Π΄ΠΎΠ»ΡŒ ΠΊΡ€ΠΈΠ²ΠΎΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ @strong{Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²} Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=y.nx=z.nx=r.nx}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Plot}. @sref{Tube sample}
+@anchor{stem}
+@deftypefn {MGL command} {} stem ydat ['stl'='']
+@deftypefnx {MGL command} {} stem xdat ydat ['stl'='']
+@deftypefnx {MGL command} {} stem xdat ydat zdat ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Stem (@code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Stem (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Stem (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_stem (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_stem_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_stem_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄ΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{area}, @ref{bars}, @ref{plot}, @ref{mark}. @sref{Stem sample}
+@end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Tube (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}pen=@code{""})
-@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Tube (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{float} r, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_tube_xyzr (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} r, @code{const char *}pen)
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_tube_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{float} r, @code{const char *}pen)
-РисуСт Ρ‚Ρ€ΡƒΠ±Ρƒ Ρ€Π°Π΄ΠΈΡƒΡΠ° @var{r}  Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i], @var{z}[i]@}.
+@anchor{bars}
+@deftypefn {MGL command} {} bars ydat ['stl'='']
+@deftypefnx {MGL command} {} bars xdat ydat ['stl'='']
+@deftypefnx {MGL command} {} bars xdat ydat zdat ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Bars (@code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Bars (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Bars (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_bars (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_bars_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_bars_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΎΡΡ‹ (ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ) ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄ΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° @var{pen} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{a}, Ρ‚ΠΎ Π»ΠΈΠ½ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся ΠΎΠ΄Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{f}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ‚ΠΈΠΏΠ° waterfall Π΄Π»Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΡƒΠΌΡƒΠ»ΡΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡ„Ρ„Π΅ΠΊΡ‚Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠœΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Π° Π΄Π»Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΅ΡΠ»ΠΈ Ρ‡ΠΈΡΠ»ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ ΡƒΠ΄Π²ΠΎΠ΅Π½Π½ΠΎΠΌΡƒ Ρ‡ΠΈΡΠ»Ρƒ ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Π΄Π»Ρ ΠΏΠΎΡΡ‚роСния. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{barh}, @ref{cones}, @ref{area}, @ref{stem}, @ref{chart}, @ref{barwidth}. @sref{Bars sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Tube (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}r, @code{const char *}pen=@code{""})
-@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Tube (@code{const mglData &}x, @code{const mglData &}y, @code{float} r, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_tube_xyr (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} r, @code{const char *}pen)
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_tube_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{float} r, @code{const char *}pen)
-РисуСт Ρ‚Ρ€ΡƒΠ±Ρƒ Ρ€Π°Π΄ΠΈΡƒΡΠ° @var{r} ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}).
+@anchor{barh}
+@deftypefn {MGL command} {} barh vdat ['stl'='']
+@deftypefnx {MGL command} {} barh ydat vdat ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Barh (@code{const mglData &}v, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Barh (@code{const mglData &}y, @code{const mglData &}v, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_barh (@code{HMGL} gr, @code{HCDT} v, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_barh_xy (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} v, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΎΡΡ‹ (ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ) ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄ΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° @var{pen} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{a}, Ρ‚ΠΎ Π»ΠΈΠ½ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся ΠΎΠ΄Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{f}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ‚ΠΈΠΏΠ° waterfall Π΄Π»Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΡƒΠΌΡƒΠ»ΡΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡ„Ρ„Π΅ΠΊΡ‚Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠœΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Π° Π΄Π»Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΅ΡΠ»ΠΈ Ρ‡ΠΈΡΠ»ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ ΡƒΠ΄Π²ΠΎΠ΅Π½Π½ΠΎΠΌΡƒ Ρ‡ΠΈΡΠ»Ρƒ ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Π΄Π»Ρ ΠΏΠΎΡΡ‚роСния. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{bars}, @ref{barwidth}. @sref{Barh sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Tube (@code{const mglData &}y, @code{const mglData &}r, @code{const char *}pen=@code{""})
-@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Tube (@code{const mglData &}y, @code{float} r, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_tube_r (@code{HMGL} gr, @code{const HMDT} y, @code{const HMDT} r, @code{const char *}pen)
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_tube (@code{HMGL} gr, @code{const HMDT} y, @code{float} r, @code{const char *}pen)
-РисуСт Ρ‚Ρ€ΡƒΠ±Ρƒ Ρ€Π°Π΄ΠΈΡƒΡΠ° @var{r} ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}), Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{x}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x].
+@anchor{cones}
+@deftypefn {MGL command} {} cones ydat ['stl'='']
+@deftypefnx {MGL command} {} cones xdat ydat ['stl'='']
+@deftypefnx {MGL command} {} cones xdat ydat zdat ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Cones (@code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Cones (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Cones (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_cones (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_cones_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_cones_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ ΠΊΠΎΠ½ΡƒΡΡ‹ ΠΈΠ· Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄ΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° @var{pen} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ» @samp{a}, Ρ‚ΠΎ Π»ΠΈΠ½ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся ΠΎΠ΄Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄Ρ€ΡƒΠ³ΠΎΠΉ. ΠœΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Π° Π΄Π»Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΅ΡΠ»ΠΈ Ρ‡ΠΈΡΠ»ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ ΡƒΠ΄Π²ΠΎΠ΅Π½Π½ΠΎΠΌΡƒ Ρ‡ΠΈΡΠ»Ρƒ ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Π΄Π»Ρ ΠΏΠΎΡΡ‚роСния. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{bars}, @ref{barwidth}. @sref{Cones sample}
 @end deftypefn
 
-@c ==================================================================
-@node Mark, TextMark, Tube, 1D plotting
-@subsection Mark
-@cindex Mark
 
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ @var{r}*@var{MarkSize} (@pxref{Default sizes}) Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ @strong{Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²} Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=y.nx=z.nx=r.nx}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). Π”ля Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ @ref{Plot} Ρ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ Π»ΠΈΠ½ΠΈΠ΅ΠΉ (со ΡΡ‚ΠΈΠ»Π΅ΠΌ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΠΈΠΌ @samp{ }). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Plot}, @ref{TextMark}, @ref{Stem}, @ref{Error}. @sref{Mark sample}
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Mark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_mark_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} r, @code{const char *}pen)
-РисуСт ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π΄Π»Ρ Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i], @var{z}[i]@}.
+@anchor{chart}
+@deftypefn {MGL command} {} chart adat ['col'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Chart (@code{const mglData &}a, @code{const char *}col=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_chart (@code{HMGL} gr, @code{HCDT} a, @code{const char *}col, @code{const char *}opt)
+@end ifclear
+РисуСт Ρ†Π²Π΅Ρ‚Π½Ρ‹Π΅ ΠΏΠΎΠ»ΠΎΡΡ‹ (пояса) Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π°Π½Π½Ρ‹Ρ… @var{a}. Π§ΠΈΡΠ»ΠΎ ΠΏΠΎΠ»ΠΎΡ Ρ€Π°Π²Π½ΠΎ Ρ‡ΠΈΡΠ»Ρƒ ΡΡ‚Ρ€ΠΎΠΊ @var{a} (Ρ€Π°Π²Π½ΠΎ @var{a.ny}). Π¦Π²Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΡ ΠΏΠΎΠΎΡ‡Π΅Ρ€Ρ‘Π΄Π½ΠΎ ΠΌΠ΅Π½ΡΠ΅Ρ‚ся ΠΈΠ· Ρ†Π²Π΅Ρ‚ΠΎΠ² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² @var{col} ΠΈΠ»ΠΈ Π² ΠΏΠ°Π»ΠΈΡ‚Ρ€Π΅ (см. @ref{Palette and colors}). ΠŸΡ€ΠΎΠ±Π΅Π» Π² Ρ†Π²Π΅Ρ‚Π°Ρ… ΡΠΎΠΎΡ‚вСтствуСт ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΌΡƒ "Ρ†Π²Π΅Ρ‚Ρƒ", Ρ‚.Π΅. Π΅ΡΠ»ΠΈ @var{col} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΏΡ€ΠΎΠ±Π΅Π»(Ρ‹), Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎΠ»ΠΎΡΠ° Π½Π΅ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся. Π¨ΠΈΡ€ΠΈΠ½Π° ΠΏΠΎΠ»ΠΎΡΡ‹ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π° Π² @var{a}. Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΠΈΡ… ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° @var{col} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Ρ‘рная Π³Ρ€Π°Π½ΠΈΡ†Π° ΠΏΠΎΠ»ΠΎΡ. Π“Ρ€Π°Ρ„ΠΈΠΊ Π²Ρ‹Π³Π»ΡΠ΄ΠΈΡ‚ Π»ΡƒΡ‡ΡˆΠ΅ Π² (послС Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ ΡΠΈΡΡ‚Π΅ΠΌΡ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚) ΠΈ/ΠΈΠ»ΠΈ Π² ΠΏΠΎΠ»ΡΡ€Π½ΠΎΠΉ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (становится Pie chart). @sref{Chart sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Mark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}r, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_mark_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} r, @code{const char *}pen)
-РисуСт ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π΄Π»Ρ Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}).
+@anchor{boxplot}
+@deftypefn {MGL command} {} boxplot adat ['stl'='']
+@deftypefnx {MGL command} {} boxplot xdat adat ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} BoxPlot (@code{const mglData &}a, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} BoxPlot (@code{const mglData &}x, @code{const mglData &}a, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_boxplot (@code{HMGL} gr, @code{HCDT} a, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_boxplot_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} a, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ boxplot (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ box-and-whisker diagram ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ "ящик Ρ ΡƒΡΠ°ΠΌΠΈ") Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @var{x}[i] Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z} = @var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ @var{z}=@var{Min.z}). Π­Ρ‚ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊ, ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€ΠΎΡΡ‚ностСй @var{a}[i,j] (ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒ (Q1), ΠΌΠ΅Π΄ΠΈΠ°Π½Π° (Q2), Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒ (Q3) ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΡƒΠΌ) Π²Π΄ΠΎΠ»ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ (j-Π³ΠΎ) Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{plot}, @ref{error}, @ref{bars}, @ref{barwidth}. @sref{BoxPlot sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Mark (@code{const mglData &}y, @code{const mglData &}r, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_mark_y (@code{HMGL} gr, @code{const HMDT} y, @code{const HMDT} r, @code{const char *}pen)
-РисуСт ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π΄Π»Ρ Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}), Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{x}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x].
+@anchor{candle}
+@deftypefn {MGL command} {} candle vdat1 ['stl'='']
+@deftypefnx {MGL command} {} candle vdat1 vdat2 ['stl'='']
+@deftypefnx {MGL command} {} candle vdat1 ydat1 ydat2 ['stl'='']
+@deftypefnx {MGL command} {} candle vdat1 vdat2 ydat1 ydat2 ['stl'='']
+@deftypefnx {MGL command} {} candle xdat vdat1 vdat2 ydat1 ydat2 ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Candle (@code{const mglData &}v1, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Candle (@code{const mglData &}v1, @code{const mglData &}v2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Candle (@code{const mglData &}v1, @code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Candle (@code{const mglData &}v1, @code{const mglData &}v2, @code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Candle (@code{const mglData &}x, @code{const mglData &}v1, @code{const mglData &}v2, @code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_candle (@code{HMGL} gr, @code{HCDT} v1, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_candle_yv (@code{HMGL} gr, @code{HCDT} v1, @code{HCDT} v2, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_candle_xyv (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} v1, @code{HCDT} v2, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ candlestick chart Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @var{x}[i]. Π­Ρ‚ΠΎΡ‚ Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ ("свСчой") Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹. ΠŸΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Π°Ρ (бСлая) ΡΠ²Π΅Ρ‡Π° ΡΠΎΠΎΡ‚вСтствуСт Ρ€ΠΎΡΡ‚Ρƒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ @var{v1}[i]<@var{v2}[i], Ρ‡Ρ‘рная -- ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡŽ. "Π’Π΅Π½ΠΈ" ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ @var{y1} ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ @var{y2} Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ. Π•сли @var{v2} ΠΎΡ‚сутствуСт, Ρ‚ΠΎ ΠΎΠ½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ся ΠΊΠ°ΠΊ @var{v2}[i]=@var{v1}[i+1]. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{plot}, @ref{bars}, @ref{barwidth}. @sref{Candle sample}
 @end deftypefn
 
-@c ==================================================================
-@node TextMark, Error, Mark, 1D plotting
-@subsection TextMark
-@cindex TextMark
-
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Ρ‚Скст @var{text} ΠΊΠ°ΠΊ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Ρ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ @var{r}*@var{MarkSize} (@pxref{Default sizes}) Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ @strong{Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²} Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=y.nx=z.nx=r.nx}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Plot}, @ref{Mark}, @ref{Stem}. @sref{TextMark sample}
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} TextMark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}text, @code{const char *}fnt=@code{""})
-@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} TextMark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const wchar_t *}text, @code{const char *}fnt=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_textmarkw_xyzr (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} r, @code{const wchar_t *}text, @code{const char *}fnt)
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_textmark_xyzr (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} r, @code{const char *}text, @code{const char *}fnt)
-РисуСт Ρ‚СкстовыС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}[i], @var{y}[i], @var{z}[i]@}.
-@end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} TextMark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}r, @code{const char *}text, @code{const char *}fnt=@code{""})
-@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} TextMark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}r, @code{const wchar_t *}text, @code{const char *}fnt=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_textmarkw_xyr (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} r, @code{const wchar_t *}text, @code{const char *}fnt)
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_textmark_xyr (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} r, @code{const char *}text, @code{const char *}fnt)
-РисуСт Ρ‚СкстовыС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}).
+@anchor{error}
+@deftypefn {MGL command} {} error ydat yerr ['stl'='']
+@deftypefnx {MGL command} {} error xdat ydat yerr ['stl'='']
+@deftypefnx {MGL command} {} error xdat ydat xerr yerr ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Error (@code{const mglData &}y, @code{const mglData &}ey, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Error (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ey, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Error (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ex, @code{const mglData &}ey, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_error (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} ey, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_error_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ey, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_error_exy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ex, @code{HCDT} ey, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡˆΠΈΠ±ΠΊΠΈ Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}[i], @var{y}[i]@} Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z} = @var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ @var{z}=@var{Min.z}). Π’Π°ΠΊΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ ΠΎΡ‚обраТСния ΠΎΡˆΠΈΠ±ΠΊΠΈ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°, Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΈ ΠΏΡ€. Π•сли @var{pen} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{@@}, Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π±ΠΎΠ»ΡŒΡˆΠΈΠ΅ ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{plot}, @ref{mark}. @sref{Error sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} TextMark (@code{const mglData &}y, @code{const mglData &}r, @code{const char *}text, @code{const char *}fnt=@code{""})
-@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} TextMark (@code{const mglData &}y, @code{const mglData &}r, @code{const wchar_t *}text, @code{const char *}fnt=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_textmarkw_yr (@code{HMGL} gr, @code{const HMDT} y, @code{const HMDT} r, @code{const wchar_t *}text, @code{const char *}fnt)
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_textmark_yr (@code{HMGL} gr, @code{const HMDT} y, @code{const HMDT} r, @code{const char *}text, @code{const char *}fnt)
-РисуСт Ρ‚СкстовыС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}), Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{x}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x].
+@anchor{mark}
+@deftypefn {MGL command} {} mark ydat rdat ['stl'='']
+@deftypefnx {MGL command} {} mark xdat ydat rdat ['stl'='']
+@deftypefnx {MGL command} {} mark xdat ydat zdat rdat ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Mark (@code{const mglData &}y, @code{const mglData &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Mark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Mark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_mark_y (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_mark_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_mark_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ @var{r}*@var{MarkSize} (см. @ref{Default sizes}) Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Π”ля Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ @ref{plot} Ρ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ Π»ΠΈΠ½ΠΈΠ΅ΠΉ (со ΡΡ‚ΠΈΠ»Π΅ΠΌ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΠΈΠΌ @samp{ }). Π”ля ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² Ρ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠ°ΠΊ Ρƒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ @ref{error} ΡΠΎ ΡΡ‚ΠΈΠ»Π΅ΠΌ @samp{@@}. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{plot}, @ref{textmark}, @ref{error}, @ref{stem}. @sref{Mark sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} TextMark (@code{const mglData &}y, @code{const char *}text, @code{const char *}fnt=@code{""})
-@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} TextMark (@code{const mglData &}y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_textmarkw (@code{HMGL} gr, @code{const HMDT} y, @code{const wchar_t *}text, @code{const char *}fnt)
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_textmark (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}text, @code{const char *}fnt)
-РисуСт Ρ‚СкстовыС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}[i], @var{y}[i]@} Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z}=@var{Min.z}), Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{x}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x]. The mark sizes @var{r}[i]=1 for all points.
+@anchor{textmark}
+@deftypefn {MGL command} {} textmark ydat 'txt' ['stl'='']
+@deftypefnx {MGL command} {} textmark ydat rdat 'txt' ['stl'='']
+@deftypefnx {MGL command} {} textmark xdat ydat rdat 'txt' ['stl'='']
+@deftypefnx {MGL command} {} textmark xdat ydat zdat rdat 'txt' ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglData &}y, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglData &}y, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglData &}y, @code{const mglData &}r, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglData &}y, @code{const mglData &}r, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}r, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}r, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_textmark (@code{HMGL} gr, @code{HCDT} y, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_textmarkw (@code{HMGL} gr, @code{HCDT} y, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_textmark_yr (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} r, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_textmarkw_yr (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} r, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_textmark_xyr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} r, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_textmarkw_xyr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} r, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_textmark_xyzr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_textmarkw_xyzr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Ρ‚Скст @var{text} ΠΊΠ°ΠΊ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Ρ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ @var{r}*@var{MarkSize} (см. @ref{Default sizes}) Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{plot}, @ref{mark}, @ref{stem}. @sref{TextMark sample}
 @end deftypefn
 
-@c ==================================================================
-@node Error, BoxPlot, TextMark, 1D plotting
-@subsection Error
-@cindex Error
-
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡˆΠΈΠ±ΠΊΠΈ Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}[i], @var{y}[i]@} Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z} = @var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ @var{z}=@var{Min.z}). Π’Π°ΠΊΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ ΠΎΡ‚обраТСния ΠΎΡˆΠΈΠ±ΠΊΠΈ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°, Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΈ ΠΏΡ€. Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ @strong{Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²} Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=y.nx=z.nx=r.nx}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Plot}. @sref{Error sample}
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Error (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ex, @code{const mglData &}ey, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_error_exy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} ex, @code{const HMDT} ey, @code{const char *}pen)
-РисуСт Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡˆΠΈΠ±ΠΊΠΈ @{@var{ex}, @var{ey}@} Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}, @var{y}@}.
+@anchor{label}
+@deftypefn {MGL command} {} label ydat 'txt' ['stl'='']
+@deftypefnx {MGL command} {} label xdat ydat 'txt' ['stl'='']
+@deftypefnx {MGL command} {} label xdat ydat zdat 'txt' ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{const mglData &}y, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{const mglData &}y, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{const mglData &}x, @code{const mglData &}y, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_label (@code{HMGL} gr, @code{HCDT} y, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_labelw (@code{HMGL} gr, @code{HCDT} y, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_label_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_labelw_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_label_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_labelw_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄ΡΡ‚ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ ΡΡ‚Ρ€ΠΎΠΊΡƒ @var{txt} Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° @var{txt} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{%x}, @samp{%y}, @samp{%z} ΠΈΠ»ΠΈ @samp{%n}, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈΠ»ΠΈ Π½Π° Π½ΠΎΠΌΠ΅Ρ€ Ρ‚ΠΎΡ‡ΠΊΠΈ. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{plot}, @ref{mark}, @ref{textmark}. @sref{Label sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Error (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ey, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_error_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} ey, @code{const char *}pen)
-РисуСт Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡˆΠΈΠ±ΠΊΠΈ @var{ey} (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΄ΠΎΠ»ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ) Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}, @var{y}@}.
+@anchor{tube}
+@deftypefn {MGL command} {} tube ydat rdat ['stl'='']
+@deftypefnx {MGL command} {} tube ydat @code{rval} ['stl'='']
+@deftypefnx {MGL command} {} tube xdat ydat rdat ['stl'='']
+@deftypefnx {MGL command} {} tube xdat ydat @code{rval} ['stl'='']
+@deftypefnx {MGL command} {} tube xdat ydat zdat rdat ['stl'='']
+@deftypefnx {MGL command} {} tube xdat ydat zdat @code{rval} ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tube (@code{const mglData &}y, @code{const mglData &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tube (@code{const mglData &}y, @code{float} r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tube (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tube (@code{const mglData &}x, @code{const mglData &}y, @code{float} r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tube (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tube (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{float} r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_tube_r (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_tube (@code{HMGL} gr, @code{HCDT} y, @code{float} r, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_tube_xyr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_tube_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{float} r, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_tube_xyzr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_tube_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{float} r, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ Ρ‚Ρ€ΡƒΠ±Ρƒ Ρ€Π°Π΄ΠΈΡƒΡΠ° @var{r}[i] Π²Π΄ΠΎΠ»ΡŒ ΠΊΡ€ΠΈΠ²ΠΎΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{plot}. @sref{Tube sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Error (@code{const mglData &}y, @code{const mglData &}ey, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_error (@code{HMGL} gr, @code{const HMDT} y, @code{const HMDT} ey, @code{const char *}pen)
-РисуСт Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡˆΠΈΠ±ΠΊΠΈ @var{ey}  (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΄ΠΎΠ»ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ) Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @{@var{x}, @var{y}@}, Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{x}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x].
+@anchor{torus}
+@deftypefn {MGL command} {} torus rdat zdat ['stl'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Torus (@code{const mglData &}r, @code{const mglData &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_torus (@code{HMGL} gr, @code{HCDT} r, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt)
+@end ifclear
+Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ ΠΊΡ€ΠΈΠ²ΠΎΠΉ @{@var{r}, @var{z}@} ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡΠΈ. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° @var{pen} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{x} ΠΈΠ»ΠΈ @samp{z}, Ρ‚ΠΎ ΠΎΡΡŒ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½Π° Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Π΄ΠΎΠ»ΡŒ ΠΎΡΠΈ y). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{plot}, @ref{axial}. @sref{Torus sample}
 @end deftypefn
 
-@c ==================================================================
-@node BoxPlot, , Error, 1D plotting
-@subsection BoxPlot
-@cindex BoxPlot
 
-Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ boxplot (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ box-and-whisker diagram ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ "ящик Ρ ΡƒΡΠ°ΠΌΠΈ") Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… @var{x}[i] Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ @var{z} = @var{zVal} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ @var{z}=@var{Min.z}). Π­Ρ‚ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊ, ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€ΠΎΡΡ‚ностСй @var{a}[i,j] (ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒ (Q1), ΠΌΠ΅Π΄ΠΈΠ°Π½Π° (Q2), Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒ (Q3) ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΡƒΠΌ) Π²Π΄ΠΎΠ»ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ (j-Π³ΠΎ) Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ @strong{Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²} Π΄Π»Ρ Π²ΡΠ΅Ρ… ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @code{x.nx=a.nx}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΈ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΉ (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Plot}, @ref{Error}, @ref{Bars}, @ref{Default sizes}. @sref{BoxPlot sample}
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} BoxPlot (@code{const mglData &}x, @code{const mglData &}a, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_boxplot_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} a, @code{const char *}pen)
-РисуСт boxplot Ρ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡΠΌΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ @var{x}[i].
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} BoxPlot (@code{const mglData &}a, @code{const char *}pen=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_boxplot (@code{HMGL} gr, @code{const HMDT} a, @code{const char *}pen)
-РисуСт boxplot ΡΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡΠΌΠΈ @var{x}[i] Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}.x, @var{Max}.x].
-@end deftypefn
 
 @c ##################################################################
 @node 2D plotting, 3D plotting, 1D plotting, MathGL core
 @section 2D Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ
-
-Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΡ‚роят Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π΄Π»Ρ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… (2D) ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΌΠ°ΡΡΠΈΠ²Ρ‹, Π·Π°Π²ΠΈΡΡΡ‰ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Π΄Π²ΡƒΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (индСксов) ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ @math{f(x_i,y_j), i=1...n, j=1...m}. Π•ΡΡ‚ΡŒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² 2D Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ²: ΡΠΏΠ»ΠΎΡˆΠ½Π°Ρ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ (Surf), ΡΠ΅Ρ‚чатая ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ (Mesh), ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΈΠ· ΡΡ‰ΠΈΠΊΠΎΠ² (Boxs), ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΏΠ»ΠΈΡ‚ΠΎΠΊ (Tile), Π²ΠΎΠ΄ΠΎΠΏΠ°Π΄ (Fall), Π»Π΅Π½Ρ‚ΠΎΡ‡ΠΊΠΈ (Belt), Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠ»ΠΎΡ‚ности (Dens), Π»ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ (Cont), Π»ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ (ContF) ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΡ… Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ (Axial). Π’ Ρ„ункциях Cont(), ContF() ΠΈ Axial() Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π²Ρ‚оматичСски ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. ΠœΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΅Ρ‚ΠΊΡƒ (Grid) ΠΏΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π»Ρ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π²ΠΈΠ΄Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΏΠ»ΠΎΡ‚ности ΠΈΠ»ΠΈ Π»ΠΈΠ½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π½Ρ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ ΠΈΠ½Ρ‚СрфСйс. Π•ΡΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡ Π΄Π»Ρ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Ρ Π°Π²Ρ‚оматичСскими ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ ΠΈ Π²Π΅Ρ€ΡΠΈΡ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΡΡ…Π΅ΠΌΡ‹ Π·Π°Π΄Π°ΡŽΡ‚ся ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ @xref{Color scheme}. @sref{2D plot sample}
-
-@menu
-* Mesh::
-* Fall::
-* Belt::
-* Surf::
-* Boxs::
-* Tile::
-* Dens::
-* Cont::
-* ContF::
-* ContD::
-* Axial::
-* Grad::
-* Grid::
-@end menu
-
-@c ==================================================================
-@node Mesh, Fall, , 2D plotting
-@subsection Mesh
 @cindex Mesh
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Mesh (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_mesh_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-РисуСт ΡΠ΅Ρ‚Ρ‡Π°Ρ‚ΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ, Π·Π°Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΠΈ @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=z.nx && y.nx=z.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{z}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Surf}, @ref{Fall}, @ref{MeshNum}, @ref{Cont}, @ref{Tens}. @sref{Mesh sample}
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Mesh (@code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_mesh (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
-@end deftypefn
-
-@c ==================================================================
-@node Fall, Belt, Mesh, 2D plotting
-@subsection Fall
 @cindex Fall
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Fall (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_fall_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-РисуСт Π²ΠΎΠ΄ΠΎΠΏΠ°Π΄ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π“Ρ€Π°Ρ„ΠΈΠΊ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π΄Π»Ρ ΠΏΠΎΡΡ‚роСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΡ€ΠΈΠ²Ρ‹Ρ…, ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Π²Π³Π»ΡƒΠ±ΡŒ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³Π°. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{x}, Ρ‚ΠΎ Π»ΠΈΠ½ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π²Π΄ΠΎΠ»ΡŒ x-оси (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π»ΠΈΠ½ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π²Π΄ΠΎΠ»ΡŒ y-оси). ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=z.nx && y.nx=z.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{z}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Belt}, @ref{Mesh}, @ref{Tens}, @ref{MeshNum}. @sref{Fall sample}
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Fall (@code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_fall (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
-@end deftypefn
-
-@c ==================================================================
-@node Belt, Surf, Fall, 2D plotting
-@subsection Belt
 @cindex Belt
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Belt (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_belt_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-РисуСт Π»Π΅Π½Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π“Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ 3d ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Plot() (@pxref{Plot}). Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{x}, Ρ‚ΠΎ Π»ΠΈΠ½ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π²Π΄ΠΎΠ»ΡŒ x-оси (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π»ΠΈΠ½ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π²Π΄ΠΎΠ»ΡŒ y-оси). ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=z.nx && y.nx=z.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{z}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Fall}, @ref{Surf}, @ref{Plot}, @ref{MeshNum}. @sref{Belt sample}
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Belt (@code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_belt (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
-@end deftypefn
-
-@c ==================================================================
-@node Surf, Boxs, Belt, 2D plotting
-@subsection Surf
 @cindex Surf
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Surf (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_surf_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-РисуСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}, Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…ности Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΡΠ΅Ρ‚ΠΊΠ°. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=z.nx && y.nx=z.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{z}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Mesh}, @ref{Dens}, @ref{Belt}, @ref{Tile}, @ref{Boxs}, @ref{SurfC}, @ref{SurfA}. @sref{Surf sample}
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Surf (@code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_surf (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
-@end deftypefn
-
-@c ==================================================================
-@node Boxs, Tile, Surf, 2D plotting
-@subsection Boxs
 @cindex Boxs
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Boxs (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_boxs_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-РисуСт Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΡΡ‰ΠΈΠΊΠΈ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=z.nx && y.nx=z.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{z}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Surf}, @ref{Dens}, @ref{Tile}, @ref{Step}. @sref{Boxs sample}
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Boxs (@code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_boxs (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
-@end deftypefn
-
-@c ==================================================================
-@node Tile, Dens, Boxs, 2D plotting
-@subsection Tile
 @cindex Tile
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Tile (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_tile_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-РисуСт ΠΏΠ»ΠΈΡ‚ΠΊΠΈ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π“Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ 3d ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Step() (@pxref{Step}). Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=z.nx && y.nx=z.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{z}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Surf}, @ref{Boxs}, @ref{Step}, @ref{TileS}. @sref{Tile sample}
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Tile (@code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_tile (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
-@end deftypefn
-
-@c ==================================================================
-@node Dens, Cont, Tile, 2D plotting
-@subsection Dens
 @cindex Dens
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Dens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_dens_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-РисуСт Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠ»ΠΎΡ‚ности Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} ΠΏΡ€ΠΈ @var{z} = @var{zVal}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΡΠ΅Ρ‚ΠΊΠ°. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=z.nx && y.nx=z.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{z}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Surf}, @ref{Cont}, @ref{ContF}, @ref{Boxs}, @ref{Tile}, @ref{DensXYZ}. @sref{Dens sample}
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Dens (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_dens (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
-@end deftypefn
-
-@c ==================================================================
-@node Cont, ContF, Dens, 2D plotting
-@subsection Cont
 @cindex Cont
+@cindex ContF
+@cindex ContD
+@cindex Axial
+@cindex Grad
+@cindex Grid
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Cont (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_cont_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-РисуСт Π»ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} ΠΏΡ€ΠΈ @var{z} = @var{zVal} (ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ @var{z=v}[k] Π΅ΡΠ»ΠΈ @code{zVal==NAN}). Π›ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π΄Π»Ρ @var{z}[i,j]=@var{v}[k]. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΡΠ΅Ρ‚ΠΊΠ°. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{t} ΠΈΠ»ΠΈ @samp{T}, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{v}[k] Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ Π²Π΄ΠΎΠ»ΡŒ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² Π½Π°Π΄ (ΠΈΠ»ΠΈ ΠΏΠΎΠ΄) ΠΊΡ€ΠΈΠ²ΠΎΠΉ. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=z.nx && y.nx=z.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{z}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Dens}, @ref{ContF}, @ref{ContD}, @ref{Axial}, @ref{ContXYZ}. @sref{Cont sample}
-@end deftypefn
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Cont (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_cont__val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
-@end deftypefn
+Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΡ‚роят Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π΄Π»Ρ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… (2D) ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΌΠ°ΡΡΠΈΠ²Ρ‹, Π·Π°Π²ΠΈΡΡΡ‰ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Π΄Π²ΡƒΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (индСксов) ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ @math{f(x_i,y_j), i=1...n, j=1...m}. ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Ссли ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚) Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=z.nx && y.nx=z.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{z}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ (см. @ref{Color scheme}). Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{opt} Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (см. @ref{Command options}). @sref{2D samples}
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Cont (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{7}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_cont_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ @var{v} ΠΈΠ· @var{num} ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Cmin}, @var{Cmax}].
-@end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Cont (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{7}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_cont (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
+@anchor{surf}
+@deftypefn {MGL command} {} surf zdat ['sch'='']
+@deftypefnx {MGL command} {} surf xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Surf (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Surf (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_surf (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_surf_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+РисуСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΡΠ΅Ρ‚ΠΊΠ° Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…ности. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{mesh}, @ref{dens}, @ref{belt}, @ref{tile}, @ref{boxs}, @ref{surfc}, @ref{surfa}. @sref{Surf sample}
 @end deftypefn
 
-@c ==================================================================
-@node ContF, ContD, Cont, 2D plotting
-@subsection ContF
-@cindex ContF
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} ContF (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_contf_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-РисуСт Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ (ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹) ΡƒΡ€ΠΎΠ²Π½Ρ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} ΠΏΡ€ΠΈ @var{z} = @var{zVal} (ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ @var{z=v}[k] Π΅ΡΠ»ΠΈ @code{zVal==NAN}). Π›ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π΄Π»Ρ @var{z}[i,j]=@var{v}[k]. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΡΠ΅Ρ‚ΠΊΠ°. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=z.nx && y.nx=z.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{z}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Dens}, @ref{Cont}, @ref{Axial}, @ref{ContFXYZ}. @sref{ContF sample}
+@anchor{mesh}
+@deftypefn {MGL command} {} mesh zdat ['sch'='']
+@deftypefnx {MGL command} {} mesh xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Mesh (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Mesh (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_mesh (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_mesh_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+РисуСт ΡΠ΅Ρ‚Ρ‡Π°Ρ‚ΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ, Π·Π°Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΠΈ @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{surf}, @ref{fall}, @ref{meshnum}, @ref{cont}, @ref{tens}. @sref{Mesh sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} ContF (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_contf_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
+@anchor{fall}
+@deftypefn {MGL command} {} fall zdat ['sch'='']
+@deftypefnx {MGL command} {} fall xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Fall (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Fall (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_fall (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_fall_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+РисуСт Π²ΠΎΠ΄ΠΎΠΏΠ°Π΄ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π“Ρ€Π°Ρ„ΠΈΠΊ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π΄Π»Ρ ΠΏΠΎΡΡ‚роСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΡ€ΠΈΠ²Ρ‹Ρ…, ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Π²Π³Π»ΡƒΠ±ΡŒ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³Π°. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{x}, Ρ‚ΠΎ Π»ΠΈΠ½ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π²Π΄ΠΎΠ»ΡŒ ΠΎΡΠΈ x, ΠΈΠ½Π°Ρ‡Π΅ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) Π²Π΄ΠΎΠ»ΡŒ ΠΎΡΠΈ y. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{belt}, @ref{mesh}, @ref{tens}, @ref{meshnum}. @sref{Fall sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} ContF (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{7}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_contf_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ @var{v} ΠΈΠ· @var{num} ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Cmin}, @var{Cmax}].
+@anchor{belt}
+@deftypefn {MGL command} {} belt zdat ['sch'='']
+@deftypefnx {MGL command} {} belt xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Belt (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Belt (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_belt (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_belt_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+РисуСт Π»Π΅Π½Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π“Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ 3d ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° @ref{plot}. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{x}, Ρ‚ΠΎ Π»Π΅Π½Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π²Π΄ΠΎΠ»ΡŒ ΠΎΡΠΈ x, ΠΈΠ½Π°Ρ‡Π΅ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) Π²Π΄ΠΎΠ»ΡŒ ΠΎΡΠΈ y. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{fall}, @ref{surf}, @ref{plot}, @ref{meshnum}. @sref{Belt sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} ContF (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{7}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_contf (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
+@anchor{boxs}
+@deftypefn {MGL command} {} boxs zdat ['sch'='']
+@deftypefnx {MGL command} {} boxs xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Boxs (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Boxs (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_boxs (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_boxs_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+РисуСт Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΡΡ‰ΠΈΠΊΠΈ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{surf}, @ref{dens}, @ref{tile}, @ref{step}. @sref{Boxs sample}
 @end deftypefn
 
-@c ==================================================================
-@node ContD, Axial, ContF, 2D plotting
-@subsection ContD
-@cindex ContD
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_contd_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-РисуСт Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ (ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹) ΡƒΡ€ΠΎΠ²Π½Ρ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} ΠΏΡ€ΠΈ @var{z} = @var{zVal} (ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ @var{z=v}[k] Π΅ΡΠ»ΠΈ @code{zVal==NAN}) Ρ†Π²Π΅Ρ‚Π°ΠΌΠΈ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΡΠ²Π½ΠΎ. Π›ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π΄Π»Ρ @var{z}[i,j]=@var{v}[k] (Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ @code{v.nx>2}). Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ²: Ρ†Π²Π΅Ρ‚ k-Π³ΠΎ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ся ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ @code{sch[k%strlen(sch)]}. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=z.nx && y.nx=z.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{z}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Dens}, @ref{Cont}, @ref{ContF}. @sref{ContD sample}
+@anchor{tile}
+@deftypefn {MGL command} {} tile zdat ['sch'='']
+@deftypefnx {MGL command} {} tile xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tile (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Tile (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_tile (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_tile_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+РисуСт ΠΏΠ»ΠΈΡ‚ΠΊΠΈ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π“Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ 3d ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ @ref{step}. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{surf}, @ref{boxs}, @ref{step}, @ref{tiles}. @sref{Tile sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_contd_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
+@anchor{dens}
+@deftypefn {MGL command} {} dens zdat ['sch'='']
+@deftypefnx {MGL command} {} dens xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Dens (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{float} zVal=@code{NAN})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Dens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{float} zVal=@code{NAN})
+@deftypefnx {C function} @code{void} mgl_dens (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_dens_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+РисуСт Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠ»ΠΎΡ‚ности Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} ΠΏΡ€ΠΈ @var{z} = @var{Min}.z. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΡΠ΅Ρ‚ΠΊΠ°. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{surf}, @ref{cont}, @ref{contf}, @ref{boxs}, @ref{tile}, @code{dens[xyz]}. @sref{Dens sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} ContD (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{7}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_contd_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ @var{v} ΠΈΠ· @var{num} ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Cmin}, @var{Cmax}].
+@anchor{cont}
+@deftypefn {MGL command} {} cont vdat zdat ['sch'='']
+@deftypefnx {MGL command} {} cont vdat xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Cont (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Cont (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_cont__val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_cont_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+РисуСт Π»ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} ΠΏΡ€ΠΈ @var{z=v}[k] ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ @var{z} = @var{Min}.z Π΅ΡΠ»ΠΈ @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{_}. Π›ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π΄Π»Ρ @var{z}[i,j]=@var{v}[k]. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{t} ΠΈΠ»ΠΈ @samp{T}, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{v}[k] Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ Π²Π΄ΠΎΠ»ΡŒ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² Π½Π°Π΄ (ΠΈΠ»ΠΈ ΠΏΠΎΠ΄) ΠΊΡ€ΠΈΠ²ΠΎΠΉ. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{dens}, @ref{contf}, @ref{contd}, @ref{axial}, @code{cont[xyz]}. @sref{Cont sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} ContD (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{7}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_contd (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
+@deftypefn {MGL command} {} cont zdat ['sch'='']
+@deftypefnx {MGL command} {} cont xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Cont (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Cont (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_cont (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_cont_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ @var{v} ΠΈΠ· @var{num} ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Ρ†Π²Π΅Ρ‚Π°. Π—Π΄Π΅ΡΡŒ @var{num} Ρ€Π°Π²Π΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° @var{value} Π² ΠΎΠΏΡ†ΠΈΡΡ… @var{opt} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 7).
 @end deftypefn
 
-@c ==================================================================
-@node Axial, Grad, ContD, 2D plotting
-@subsection Axial
-@cindex Axial
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_axial_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-РисуСт ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ Π»ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π›ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π΄Π»Ρ @var{z}[i,j]=@var{v}[k]. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΡΠ΅Ρ‚чатая ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ @samp{x}, @samp{y} ΠΈΠ»ΠΈ @samp{z}, Ρ‚ΠΎ ΠΎΡΡŒ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ ΡƒΡΡ‚анавливаСтся Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=z.nx && y.nx=z.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{z}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Cont}, @ref{ContF}, @ref{Torus}, @ref{Surf3}. @sref{Axial sample}
+@anchor{contf}
+@deftypefn {MGL command} {} contf vdat zdat ['sch'='']
+@deftypefnx {MGL command} {} contf vdat xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} ContF (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} ContF (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_contf_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_contf_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+РисуСт Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ (ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹) ΡƒΡ€ΠΎΠ²Π½Ρ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} ΠΏΡ€ΠΈ @var{z=v}[k] ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ @var{z} = @var{Min}.z Π΅ΡΠ»ΠΈ @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{_}. Π›ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π΄Π»Ρ @var{z}[i,j]=@var{v}[k]. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{dens}, @ref{cont}, @ref{contd}, @code{contf[xyz]}. @sref{ContF sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_axial_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} z, @code{const char *}sch)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
+@deftypefn {MGL command} {} contf zdat ['sch'='']
+@deftypefnx {MGL command} {} contf xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} ContF (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} ContF (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_contf (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_contf_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ @var{v} ΠΈΠ· @var{num} ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Ρ†Π²Π΅Ρ‚Π°. Π—Π΄Π΅ΡΡŒ @var{num} Ρ€Π°Π²Π΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° @var{value} Π² ΠΎΠΏΡ†ΠΈΡΡ… @var{opt} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 7).
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Axial (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{3})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_axial_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ @var{v} ΠΈΠ· @var{num} ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Cmin}, @var{Cmax}].
+@anchor{contd}
+@deftypefn {MGL command} {} contd vdat zdat ['sch'='']
+@deftypefnx {MGL command} {} contd vdat xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_contd_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_contd_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+РисуСт Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ (ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹) ΡƒΡ€ΠΎΠ²Π½Ρ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} ΠΏΡ€ΠΈ @var{z=v}[k] ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ @var{z} = @var{Min}.z Π΅ΡΠ»ΠΈ @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{_}. Π›ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π΄Π»Ρ @var{z}[i,j]=@var{v}[k]. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚Π° ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ²: Ρ†Π²Π΅Ρ‚ k-Π³ΠΎ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ся ΠΊΠ°ΠΊ k-Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΊΠΈ. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{dens}, @ref{cont}, @ref{contf}. @sref{ContD sample}
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Axial (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{3})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_axial (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{int} num)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
+@deftypefn {MGL command} {} contd zdat ['sch'='']
+@deftypefnx {MGL command} {} contd xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} ContD (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} ContD (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_contd (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_contd_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ @var{v} ΠΈΠ· @var{num} ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Ρ†Π²Π΅Ρ‚Π°. Π—Π΄Π΅ΡΡŒ @var{num} Ρ€Π°Π²Π΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° @var{value} Π² ΠΎΠΏΡ†ΠΈΡΡ… @var{opt} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 7).
 @end deftypefn
 
-@c ==================================================================
-@node Grad, Grid, Axial, 2D plotting
-@subsection Grad
-@cindex Grad
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}phi, @code{const char *}sch=@code{""}, @code{int} num=@code{5})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_grad_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
-РисуСт Π»ΠΈΠ½ΠΈΠΈ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° ΡΠΊΠ°Π»ΡΡ€Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ @var{phi}[i,j,k] Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски @{@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]@}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π§ΠΈΡΠ»ΠΎ Π»ΠΈΠ½ΠΈΠΉ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ @var{num}. Π›ΠΈΠ½ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ Π³Ρ€Π°Π½ΠΈΡ† ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° ΠΏΡ€ΠΈ @var{num}<0. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z}, @var{phi} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=phi.nx && y.nx=phi.ny && z.nx=phi.nz} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx=phi.nx && x.ny=y.ny=z.ny=phi.ny && x.nz=y.nz=z.nz=phi.nz}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x}, @var{y} ΠΈ @var{z} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{phi}). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Dens3}, @ref{Cont3}, @ref{Flow}.
+@anchor{contv}
+@deftypefn {MGL command} {} contv vdat zdat ['sch'='']
+@deftypefnx {MGL command} {} contv vdat xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} ContV (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} ContV (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_contv_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_contv_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+РисуСт Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€Ρ‹ ΠΎΡ‚ Π»ΠΈΠ½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π½Ρ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} ΠΏΡ€ΠΈ @var{z=v}[k] ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ @var{z} = @var{Min}.z Π΅ΡΠ»ΠΈ @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{_}. Π›ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π΄Π»Ρ @var{z}[i,j]=@var{v}[k]. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{cont}, @ref{contf}. @sref{ContV sample}
 @end deftypefn
 
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_grad_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
-РисуСт Π»ΠΈΠ½ΠΈΠΈ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° ΡΠΊΠ°Π»ΡΡ€Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ @var{phi}[i,j] Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски @{@var{x}[i,j], @var{y}[i,j]@} ΠΏΡ€ΠΈ @var{z} = @var{zVal}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π§ΠΈΡΠ»ΠΎ Π»ΠΈΠ½ΠΈΠΉ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ @var{num}. Π›ΠΈΠ½ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ Π³Ρ€Π°Π½ΠΈΡ† ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° ΠΏΡ€ΠΈ @var{num}<0. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{phi} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=phi.nx && y.nx=phi.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=phi.nx && x.ny=y.ny=phi.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{phi}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Dens}, @ref{Cont}, @ref{ContF}, @ref{Flow}. @sref{Grad sample}
+@deftypefn {MGL command} {} contv zdat ['sch'='']
+@deftypefnx {MGL command} {} contv xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} ContV (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} ContV (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_contv (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_contv_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ @var{v} ΠΈΠ· @var{num} ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Ρ†Π²Π΅Ρ‚Π°. Π—Π΄Π΅ΡΡŒ @var{num} Ρ€Π°Π²Π΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° @var{value} Π² ΠΎΠΏΡ†ΠΈΡΡ… @var{opt} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 7).
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Grad (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_grad (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
+@anchor{axial}
+@deftypefn {MGL command} {} axial vdat zdat ['sch'='']
+@deftypefnx {MGL command} {} axial vdat xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_axial_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_axial_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+РисуСт ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ Π»ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Π›ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ Ρ€ΠΈΡΡƒΡŽΡ‚ся Π΄Π»Ρ @var{z}[i,j]=@var{v}[k]. Π•сли @var{sch} ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΡΠ΅Ρ‚чатая ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ @samp{x}, @samp{y} ΠΈΠ»ΠΈ @samp{z}, Ρ‚ΠΎ ΠΎΡΡŒ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ ΡƒΡΡ‚анавливаСтся Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{cont}, @ref{contf}, @ref{torus}, @ref{surf3}. @sref{Axial sample}
 @end deftypefn
 
-@c ==================================================================
-@node Grid, , Grad, 2D plotting
-@subsection Grid
-@cindex Grid
-
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Grid (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_grid_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-РисуСт ΠΏΠ»ΠΎΡΠΊΡƒΡŽ ΡΠ΅Ρ‚Ρƒ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} ΠΏΡ€ΠΈ @var{z} = @var{zVal}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=z.nx && y.nx=z.ny} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x} ΠΈ @var{y} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{z}). Π“Ρ€Π°Ρ„ΠΈΠΊ ΡΡ‚роится Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ z ΡΡ€Π΅Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Dens}, @ref{Cont}, @ref{ContF}.
+@deftypefn {MGL command} {} axial zdat ['sch'='']
+@deftypefnx {MGL command} {} axial xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Axial (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{int} num=@code{3})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Axial (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{int} num=@code{3})
+@deftypefnx {C function} @code{void} mgl_axial (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_axial_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ @var{v} ΠΈΠ· @var{num} ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Ρ†Π²Π΅Ρ‚Π°. Π—Π΄Π΅ΡΡŒ @var{num} Ρ€Π°Π²Π΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° @var{value} Π² ΠΎΠΏΡ†ΠΈΡΡ… @var{opt} (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 3).
 @end deftypefn
 
-@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Grid (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
-@deftypefnx {Ѐункция Π‘} @code{void} mgl_grid (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-Как ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{x}, @var{y} Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Min}, @var{Max}].
+@anchor{grid2}
+@deftypefn {MGL command} {} grid2 zdat ['sch'='']
+@deftypefnx {MGL command} {} grid2 xdat ydat zdat ['sch'='']
+@ifclear UDAV
+@deftypefnx {Method on @code{mglGraph}} @code{void} Grid (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {Method on @code{mglGraph}} @code{void} Grid (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+@deftypefnx {C function} @code{void} mgl_grid (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@deftypefnx {C function} @code{void} mgl_grid_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+@end ifclear
+РисуСт ΠΏΠ»ΠΎΡΠΊΡƒΡŽ ΡΠ΅Ρ‚Ρƒ Π΄Π»Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} ΠΏΡ€ΠΈ @var{z} = @var{Min}.z. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{dens}, @ref{cont}, @ref{contf}, @ref{meshnum}.
 @end deftypefn
 
 
@@ -2439,6 +2451,16 @@ Receive graphical information from node @var{id} using MPI. The width and height
 * Pipe::
 @end menu
 
+@c ==================================================================
+@subsection Grad
+@cindex Grad
+
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}phi, @code{const char *}sch=@code{""}, @code{int} num=@code{5})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_grad_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
+РисуСт Π»ΠΈΠ½ΠΈΠΈ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° ΡΠΊΠ°Π»ΡΡ€Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ @var{phi}[i,j,k] Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ричСски @{@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]@}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π§ΠΈΡΠ»ΠΎ Π»ΠΈΠ½ΠΈΠΉ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ @var{num}. Π›ΠΈΠ½ΠΈΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ Π³Ρ€Π°Π½ΠΈΡ† ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° ΠΏΡ€ΠΈ @var{num}<0. ΠœΠ»Π°Π΄ΡˆΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² @var{x}, @var{y}, @var{z}, @var{phi} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ @code{x.nx=phi.nx && y.nx=phi.ny && z.nx=phi.nz} ΠΈΠ»ΠΈ @code{x.nx=y.nx=z.nx=phi.nx && x.ny=y.ny=z.ny=phi.ny && x.nz=y.nz=z.nz=phi.nz}. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x}, @var{y} ΠΈ @var{z} ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ (Π½Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΊΠ°ΠΊ @var{phi}). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Dens3}, @ref{Cont3}, @ref{Flow}.
+@end deftypefn
+
+
 @c ==================================================================
 @node Traj, Vect, , Vector fields
 @subsection Traj
@@ -2448,7 +2470,7 @@ Receive graphical information from node @var{id} using MPI. The width and height
 @deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Traj (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}, @code{float} len=@code{0})
 @deftypefnx {Ѐункция Π‘} @code{void} mgl_traj_xyz (@code{HMGL} gr, @code{const HMDT}x, @code{const HMDT}y, @code{const HMDT}z, @code{const HMDT}ax, @code{const HMDT}ay, @code{const HMDT}az, @code{const char *}sch, @code{float} len)
 @deftypefnx {Ѐункция Π‘} @code{void} mgl_traj_xy (@code{HMGL} gr, @code{const HMDT}x, @code{const HMDT}y, @code{const HMDT}ax, @code{const HMDT}ay, @code{const char *}sch, @code{float} zVal, @code{float} len)
-РисуСт Π²Π΅ΠΊΡ‚ΠΎΡ€Π° @{@var{ax}, @var{ay}, @var{az}@} Π²Π΄ΠΎΠ»ΡŒ ΠΊΡ€ΠΈΠ²ΠΎΠΉ @{@var{x}, @var{y}, @var{z}@}. Π”Π»ΠΈΠ½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π° @math{\sqrt@{ax^2+ay^2+az^2@}}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ (@pxref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (@pxref{Palette and colors}). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{len} Π·Π°Π΄Π°Π΅Ρ‚ Ρ„Π°ΠΊΡ‚ΠΎΡ€ Π΄Π»ΠΈΠ½Ρ‹ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² (Ссли Π½Π΅ Π½ΡƒΠ»ΡŒ) ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΊΡ€ΠΈΠ²ΠΎΠΉ (Ссли @var{len}=0). Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΌΡƒ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ 2 ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡŒΡˆΠ΅. Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Vect}. @sref{Traj sample}
+РисуСт Π²Π΅ΠΊΡ‚ΠΎΡ€Π° @{@var{ax}, @var{ay}, @var{az}@} Π²Π΄ΠΎΠ»ΡŒ ΠΊΡ€ΠΈΠ²ΠΎΠΉ @{@var{x}, @var{y}, @var{z}@}. Π”Π»ΠΈΠ½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π° @math{\sqrt@{ax^2+ay^2+az^2@}}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{pen} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ (см. @ref{Line styles}). ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (@code{pen=""}) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚ ΠΈΠ· ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ (см. @ref{Palette and colors}). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{len} Π·Π°Π΄Π°Π΅Ρ‚ Ρ„Π°ΠΊΡ‚ΠΎΡ€ Π΄Π»ΠΈΠ½Ρ‹ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² (Ссли Π½Π΅ Π½ΡƒΠ»ΡŒ) ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΊΡ€ΠΈΠ²ΠΎΠΉ (Ссли @var{len}=0). Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΌΡƒ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ 2 ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡŒΡˆΠ΅. Π“Ρ€Π°Ρ„ΠΈΠΊ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{Vect}. @sref{Traj sample}
 @end deftypefn
 
 @c ==================================================================
@@ -2759,17 +2781,17 @@ gr->ContZ(c.Sum("z"),0,-1);
 @subsection TriCont
 @cindex TriCont
 
-@deftypefn {Method on @code{mglGraph}} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
-@deftypefnx {Method on @code{mglGraph}} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
-@deftypefnx {C function} @code{void} mgl_tricont_xyzcv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{float} zVal)
-@deftypefnx {C function} @code{void} mgl_tricont_xyzv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_tricont_xyzcv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{float} zVal)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_tricont_xyzv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
 Π ΠΈΡΡƒΠ΅Ρ‚ Π»ΠΈΠ½ΠΈΠΈ ΡƒΡ€ΠΎΠ²Π½Ρ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности ΠΈΠ· Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΈ @var{z} = @var{zVal} (ΠΈΠ»ΠΈ Π΄Π»Ρ @var{z=v}[k] Π΅ΡΠ»ΠΈ @code{zVal==NAN}). Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² Π·Π°Π΄Π°ΡŽΡ‚ся ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ @var{id} Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΌΡƒ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ ΠΌΠ°ΡΡΠΈΠ²Π° @var{id} Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ 3 ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡŒΡˆΠ΅. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹. ΠœΠ°ΡΡΠΈΠ² @var{c} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² (Ссли @var{id}.ny=@var{c}.nx) ΠΈΠ»ΠΈ Ρ†Π²Π΅Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½ (Ссли @var{x}.nx=@var{c}.nx). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{TriPlot}, @ref{Cont}.
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN})
-@deftypefnx {Method on @code{mglGraph}} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN})
-@deftypefnx {C function} @code{void} mgl_tricont_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{num}, @code{float} zVal)
-@deftypefnx {C function} @code{void} mgl_tricont_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{num}, @code{float} zVal)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_tricont_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{num}, @code{float} zVal)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_tricont_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{num}, @code{float} zVal)
 ΠΠ½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ Ρ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ @var{v} ΠΈΠ· @var{num} ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π²Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [@var{Cmin}, @var{Cmax}].
 @end deftypefn
 
@@ -2778,15 +2800,15 @@ gr->ContZ(c.Sum("z"),0,-1);
 @subsection QuadPlot
 @cindex QuadPlot
 
-@deftypefn {Method on @code{mglGraph}} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
-@deftypefnx {Method on @code{mglGraph}} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
-@deftypefnx {C function} @code{void} mgl_quadplot_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-@deftypefnx {C function} @code{void} mgl_quadplot_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
+@deftypefnx {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_quadplot_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_quadplot_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch)
 Π ΠΈΡΡƒΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ². Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² Π·Π°Π΄Π°ΡŽΡ‚ся ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ @var{id} Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Ρ‚ΠΎΡ‡Π΅ΠΊ @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Π‘Ρ‚Ρ€ΠΎΠΊΠ° @var{sch} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚овая ΡΡ…Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π•сли ΡΡ‚Ρ€ΠΎΠΊΠ° ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ @samp{#}, Ρ‚ΠΎ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся ΡΠ΅Ρ‚чатая ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ. Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ 1-ΠΌΡƒ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ ΠΌΠ°ΡΡΠΈΠ²Π° @var{id} Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ 4 ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡŒΡˆΠ΅. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x}, @var{y}, @var{z} Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹. ΠœΠ°ΡΡΠΈΠ² @var{c} Π·Π°Π΄Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² (Ссли @var{id}.ny=@var{c}.nx) ΠΈΠ»ΠΈ Ρ†Π²Π΅Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½ (Ссли @var{x}.nx=@var{c}.nx). Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ @ref{TriPlot}.
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
-@deftypefnx {C function} @code{void} mgl_quadplot_xy (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}sch, @code{float} zVal)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
+@deftypefnx {Ѐункция Π‘} @code{void} mgl_quadplot_xy (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}sch, @code{float} zVal)
 ΠšΠ°ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ @var{z}[i]=@var{zVal}.
 @end deftypefn
 
@@ -2796,7 +2818,7 @@ gr->ContZ(c.Sum("z"),0,-1);
 @cindex Plot
 @cindex Surf
 
-Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΡ‚роят Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ 1D ΠΈΠ»ΠΈ 2D Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚Скстовыми Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌΠΈ. Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠ°ΡΡΠΈΠ²Ρ‹ Π΄Π»Ρ ΠΈΡ… ΠΏΠΎΡΡ‚роСния. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{stl} Π·Π°Π΄Π°Π΅ΠΊΡ‚ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ (@pxref{Line styles}) Π΄Π»Ρ @code{Plot()} ΠΈΠ»ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ (@pxref{Color scheme}) Π΄Π»Ρ @code{Surf()}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{n} Π·Π°Π΄Π°Π΅Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ‡ΠΈΡΠ»ΠΎ Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΏΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅(Π°ΠΌ) Π΄Π»Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π’ Π½Π°ΡΡ‚оящСС Π²Ρ€Π΅ΠΌΡ (v. 1.10) Ρ‡ΠΈΡΠ»ΠΎ Ρ‚ΠΎΡ‡Π΅ΠΊ Π°Π²Ρ‚оматичСски ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ся Π΄Π»Ρ ΠΎΠ±Π»Π°ΡΡ‚ΠΈ Ρ€Π΅Π·ΠΊΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»Ρ 1D Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² (Ρ‚.Π΅. Π΄Π»Ρ Plot()).
+Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΡ‚роят Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ 1D ΠΈΠ»ΠΈ 2D Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚Скстовыми Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌΠΈ. Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠ°ΡΡΠΈΠ²Ρ‹ Π΄Π»Ρ ΠΈΡ… ΠΏΠΎΡΡ‚роСния. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{stl} Π·Π°Π΄Π°Π΅ΠΊΡ‚ ΡΡ‚ΠΈΠ»ΡŒ Π»ΠΈΠ½ΠΈΠΈ (см. @ref{Line styles}) Π΄Π»Ρ @code{Plot()} ΠΈΠ»ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΡΡ…Π΅ΠΌΡƒ (см. @ref{Color scheme}) Π΄Π»Ρ @code{Surf()}. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{n} Π·Π°Π΄Π°Π΅Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ‡ΠΈΡΠ»ΠΎ Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΏΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅(Π°ΠΌ) Π΄Π»Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Π’ Π½Π°ΡΡ‚оящСС Π²Ρ€Π΅ΠΌΡ (v. 1.10) Ρ‡ΠΈΡΠ»ΠΎ Ρ‚ΠΎΡ‡Π΅ΠΊ Π°Π²Ρ‚оматичСски ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ся Π΄Π»Ρ ΠΎΠ±Π»Π°ΡΡ‚ΠΈ Ρ€Π΅Π·ΠΊΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»Ρ 1D Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² (Ρ‚.Π΅. Π΄Π»Ρ Plot()).
 
 @deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Plot (@code{const char *}eqY, @code{const char *}stl=@code{""}, @code{float} zVal=@code{NAN}, @code{int} n=@code{100})
 @deftypefnx {Ѐункция Π‘} @code{void} mgl_fplot (@code{HMGL} gr, @code{const char *}eqY, @code{const char *}stl, @code{float} zVal, @code{int} n)
@@ -2838,7 +2860,7 @@ gr->ContZ(c.Sum("z"),0,-1);
 @cindex Fit2
 @cindex Fit3
 
-Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄Π±ΠΈΡ€Π°ΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π»Ρ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΉ Π°ΠΏΠΏΡ€ΠΎΠΊΡΠΈΠΌΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚.Π΅. ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΡΡƒΠΌΠΌΡƒ @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. ΠŸΡ€ΠΈ ΡΡ‚ΠΎΠΌ Π°ΠΏΠΏΡ€ΠΎΠΊΡΠΈΠΌΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Ρ„ункция @samp{f} ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° @samp{x} (1D ΡΠ»ΡƒΡ‡Π°ΠΉ), ΠΎΡ‚ Π΄Π²ΡƒΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² @samp{x,y} (2D ΡΠ»ΡƒΡ‡Π°ΠΉ) ΠΈΠ»ΠΈ ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² @samp{x,y,z} (3D ΡΠ»ΡƒΡ‡Π°ΠΉ). Π€ΡƒΠ½ΠΊΡ†ΠΈΡ @samp{f} Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π‘писок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π·Π°Π΄Π°Π΅Ρ‚ся ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ @var{var} (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, @samp{abcd}). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ @var{ini}. ΠžΠ΄Π½Π°ΠΊΠΎ, ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΎΡ‚сутствии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ся Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{print}=@code{true} Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ Π² @var{Message} (@pxref{Error handling}).
+Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄Π±ΠΈΡ€Π°ΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π»Ρ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΉ Π°ΠΏΠΏΡ€ΠΎΠΊΡΠΈΠΌΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚.Π΅. ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΡΡƒΠΌΠΌΡƒ @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. ΠŸΡ€ΠΈ ΡΡ‚ΠΎΠΌ Π°ΠΏΠΏΡ€ΠΎΠΊΡΠΈΠΌΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Ρ„ункция @samp{f} ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° @samp{x} (1D ΡΠ»ΡƒΡ‡Π°ΠΉ), ΠΎΡ‚ Π΄Π²ΡƒΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² @samp{x,y} (2D ΡΠ»ΡƒΡ‡Π°ΠΉ) ΠΈΠ»ΠΈ ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² @samp{x,y,z} (3D ΡΠ»ΡƒΡ‡Π°ΠΉ). Π€ΡƒΠ½ΠΊΡ†ΠΈΡ @samp{f} Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π‘писок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π·Π°Π΄Π°Π΅Ρ‚ся ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ @var{var} (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, @samp{abcd}). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ @var{ini}. ΠžΠ΄Π½Π°ΠΊΠΎ, ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΎΡ‚сутствии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ся Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ @var{print}=@code{true} Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ Π² @var{Message} (см. @ref{Error handling}).
 
 Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Fit() ΠΈ FitS() Π½Π΅ Ρ€ΠΈΡΡƒΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΌΠ°ΡΡΠΈΠ²Ρ‹. ΠžΠ½ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΌΠ°ΡΡΠΈΠ² @var{fit} ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ @samp{f} Ρ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ @math{\chi^2} ΠΎΡˆΠΈΠ±ΠΊΡƒ Π°ΠΏΠΏΡ€ΠΎΠΊΡΠΈΠΌΠ°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈ ΡΡ‚ΠΎΠΌ, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ @samp{x,y,z} Ρ€Π°Π²Π½ΠΎΡ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ @var{Min}--@var{Max}. Π§ΠΈΡΠ»ΠΎ Ρ‚ΠΎΡ‡Π΅ΠΊ Π² @var{fit} Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ся ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ· Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΌΠ°ΡΡΠΈΠ²Π° @var{fit} ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ @var{FitPnts}. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ GSL. @sref{Fitting sample}
 
@@ -2936,18 +2958,18 @@ gr->ContZ(c.Sum("z"),0,-1);
 
 Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ½ΠΈ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡΠ»Π΅ PIC Ρ€Π°ΡΡ‡Π΅Ρ‚ΠΎΠ²) ΠΈ ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π³ΡƒΠ»ΡΡ€Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΡΠ΅Ρ‚ΠΊΠ°Ρ…). Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠ΅Ρ‚ΠΎΠΊ Ρ€Π°Π²Π΅Π½ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ ΠΎΡΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Min...Max. ΠœΠ°ΡΡΠΈΠ²Ρ‹ @var{x}, @var{y}, @var{z} ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹) Ρ‚ΠΎΡ‡Π΅ΠΊ. ΠœΠ°ΡΡΠΈΠ² @var{a} Π·Π°Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ…. Π§ΠΈΡΠ»ΠΎ Ρ‚ΠΎΡ‡Π΅ΠΊ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ @var{res} -- ΠΌΠ°ΠΊΡΠΈΠΌΡƒΠΌ ΠΈΠ· Ρ€Π°Π·ΠΌΠ΅Ρ€Π° @var{res} ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ @var{FitPnts}.
 
-@deftypefn {Method on @code{mglGraph}} @code{void} Hist (@code{mglData &}res, @code{const mglData &}x, @code{const mglData &}a)
-@deftypefnx {C function} @code{int} mgl_hist_x (@code{HMGL} gr, @code{HMDT} res, @code{const HMDT} x, @code{const HMDT} a)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Hist (@code{mglData &}res, @code{const mglData &}x, @code{const mglData &}a)
+@deftypefnx {Ѐункция Π‘} @code{int} mgl_hist_x (@code{HMGL} gr, @code{HMDT} res, @code{const HMDT} x, @code{const HMDT} a)
 Π‘ΠΎΠ·Π΄Π΅Ρ‚ 1D Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ²Π° @var{a} Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [Min, Max].
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{void} Hist (@code{mglData &}res, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}a)
-@deftypefnx {C function} @code{int} mgl_hist_xy (@code{HMGL} gr, @code{HMDT} res, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} a)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Hist (@code{mglData &}res, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}a)
+@deftypefnx {Ѐункция Π‘} @code{int} mgl_hist_xy (@code{HMGL} gr, @code{HMDT} res, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} a)
 Π‘ΠΎΠ·Π΄Π΅Ρ‚ 2D Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ²Π° @var{a} Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [Min, Max].
 @end deftypefn
 
-@deftypefn {Method on @code{mglGraph}} @code{void} Hist (@code{mglData &}res, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}a)
-@deftypefnx {C function} @code{int} mgl_hist_xyz (@code{HMGL} gr, @code{HMDT} res, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} a)
+@deftypefn {ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° @code{mglGraph}} @code{void} Hist (@code{mglData &}res, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}a)
+@deftypefnx {Ѐункция Π‘} @code{int} mgl_hist_xyz (@code{HMGL} gr, @code{HMDT} res, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} a)
 Π‘ΠΎΠ·Π΄Π΅Ρ‚ 3D Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ²Π° @var{a} Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [Min, Max].
 @end deftypefn
 
index 7a297783c654f6d11bc2cdfb147b2d016fe77766..ec8029fa2ddff85afb1e6f6537aa023cc65443e5 100644 (file)
@@ -2734,8 +2734,8 @@ int sample(mglGraph *gr)
   gr->SubPlot(2,2,1,"");  gr->Title("'v' style");
   gr->Box();  gr->Flow(a,b,"v");
 
-  gr->SubPlot(2,2,2,"");  gr->Title("from edges only");
-  gr->Box();  gr->Flow(a,b,"","value -5");
+  gr->SubPlot(2,2,2,"");  gr->Title("'\\#' style");
+  gr->Box();  gr->Flow(a,b,"#");
 
   mglData ex,ey,ez; mgls_prepare3v(&ex,&ey,&ez);
   gr->SubPlot(2,2,3); gr->Title("3d variant");  gr->Rotate(50,60);
@@ -2755,14 +2755,14 @@ int sample(mglGraph *gr)
 int sample(mglGraph *gr)
 {
   mglData a,b;  mgls_prepare2v(&a,&b);
-  gr->SubPlot(2,2,0,""); gr->Title("Flow plot (default)");
+  gr->SubPlot(2,2,0,""); gr->Title("Pipe plot (default)");
   gr->Light(true);  gr->Box();  gr->Pipe(a,b);
 
   gr->SubPlot(2,2,1,"");  gr->Title("'i' style");
   gr->Box();  gr->Pipe(a,b,"i");
 
-  gr->SubPlot(2,2,2,"");  gr->Title("from edges only");
-  gr->Box();  gr->Pipe(a,b,"",0.05,"value -5");
+  gr->SubPlot(2,2,2,"");  gr->Title("'\\#' style");
+  gr->Box();  gr->Pipe(a,b,"#");
 
   mglData ex,ey,ez; mgls_prepare3v(&ex,&ey,&ez);
   gr->SubPlot(2,2,3); gr->Title("3d variant");  gr->Rotate(50,60);
@@ -3380,10 +3380,10 @@ int sample(mglGraph *gr)
   mglData a;  mgls_prepare2d(&a);
   gr->Light(true);
 
-  gr->SubPlot(2,1,0); gr->Rotate(50,60+3);
+  gr->SubPlot(2,1,0); gr->Rotate(50,60+1);
   gr->Box();  gr->Surf(a);
 
-  gr->SubPlot(2,1,1); gr->Rotate(50,60-3);
+  gr->SubPlot(2,1,1); gr->Rotate(50,60-1);
   gr->Box();  gr->Surf(a);
   return 0;
 }
index 466dc559659237d76d8328c510f1d03b11a96dbd..e51f7c1c464a71283751810bb01dedc231695019 100644 (file)
@@ -50,18 +50,22 @@ Creates a window for plotting. Parameter @var{draw} sets a pointer to drawing fu
 There are some keys handles for manipulating by the plot: 'a', 'd', 'w', 's' for the rotating; ',', '.' for viewing of the previous or next frames in the list; 'r' for the switching of transparency; 'f' for the switching of lightning; 'x' for hiding (closing) the window.
 @end deftypefn
 
-@deftypefn {Method on @code{mglWindow}} @code{void} RunThr ()
-@c @deftypefnx {C function} @code{HMGL} mgl_qt_run ()
-@deftypefnx {C function} @code{HMGL} mgl_fltk_thr ()
+@deftypefn {Method on @code{mglWindow}} @code{int} RunThr ()
+@deftypefnx {C function} @code{int} mgl_fltk_thr ()
 Run main loop for event handling in separate thread. Note, right now it work for FLTK windows only.
 @end deftypefn
 
-@deftypefn {Method on @code{mglWindow}} @code{void} Run ()
-@deftypefnx {C function} @code{HMGL} mgl_qt_run ()
-@deftypefnx {C function} @code{HMGL} mgl_fltk_run ()
+@deftypefn {Method on @code{mglWindow}} @code{int} Run ()
+@deftypefnx {C function} @code{int} mgl_qt_run ()
+@deftypefnx {C function} @code{int} mgl_fltk_run ()
 Run main loop for event handling. Usually it should be called in a separate thread or as last function call in @code{main()}.
 @end deftypefn
 
+@deftypefn {Method on @code{mglWindow}} @code{void} SetClickFunc (@code{void} (*func)(@code{HMGL} gr, @code{void *}p))
+@deftypefnx {C function} @code{void} mgl_set_click_func (@code{void} (*func)(@code{HMGL} gr, @code{void *}p))
+Set callback function @code{func} which will be called on mouse click.
+@end deftypefn
+
 @deftypefn {Method on @code{mglWindow}} @code{void} ToggleAlpha ()
 @deftypefnx {C function} @code{int} mgl_wnd_toggle_alpha (@code{HMGL} gr)
 Switch on/off transparency but do not overwrite switches in user drawing function.
index 8478e7c050138e7f2db5b2a18f03d9b4d2bcdf4e..063d0bf2f82b0f4701ae875110bd207ed3499da8 100644 (file)
--- a/todo.txt
+++ b/todo.txt
@@ -35,7 +35,9 @@ Device 0 (VID=0502 and PID=337d) is UNKNOWN.
 21. MGL testing system ???
 22. Export to X3D
 23. Try libtcc (TinyCC) as alternative to MGL -- in mgllab???
-24. Use OI & Z for determening {x,y,z} from {xs,ys}. Try to find closest.
+24. Use OI & Z for determining {x,y,z} from {xs,ys}. Try to find closest.
+25. More accurate intersections in Region
+26. Add flag for drawing 3d arrows instead of 2d (S,D -- cube, T -- sq.pyramid, I -- square, O -- sphere???, A,K,V -- ???)
 
 ============= UDAV =============
 
index 3f70661008889927918a42924f8b739f5a120377..edefc9cdf48c61a4097dd28d921a8ebe83589eec 100644 (file)
@@ -292,8 +292,8 @@ void MainWindow::makeMenu()
        a->setShortcut(Qt::Key_F1);     o->addAction(a);
 //     a = new QAction(QPixmap(":/xpm/help-faq.png"), tr("&Examples"), this);
 //     connect(a, SIGNAL(triggered()), this, SLOT(showExamples()));
-       a->setToolTip(tr("Show examples of MGL usage (Shift+F1)."));
-       a->setShortcut(Qt::SHIFT+Qt::Key_F1);   o->addAction(a);
+//     a->setToolTip(tr("Show examples of MGL usage (Shift+F1)."));
+//     a->setShortcut(Qt::SHIFT+Qt::Key_F1);   o->addAction(a);
        a = new QAction(QPixmap(":/xpm/help-faq.png"), tr("H&ints"), this);
        connect(a, SIGNAL(triggered()), this, SLOT(showHint()));
        a->setToolTip(tr("Show hints of MGL usage."));  o->addAction(a);
index 23ecdfe3a3e2f9a006d0736a7ebe8026a83e8221..0dce80935d3a110f0e0240ffd3fdebcb9dbe4965 100644 (file)
@@ -142,12 +142,18 @@ int Fl_MathGL::handle(int code)
                const Fl_Menu_Item *m = popup->popup(Fl::event_x(), Fl::event_y(), 0, 0, 0);
                if(m)   m->do_callback(wpar, vpar);
        }
-       else if(gr->get(MGL_SHOW_POS) && !zoom && !rotate && code==FL_PUSH && Fl::event_button()==FL_LEFT_MOUSE)
+       else if(!zoom && !rotate && code==FL_PUSH && Fl::event_button()==FL_LEFT_MOUSE)
        {
-               mglPoint p = gr->CalcXYZ(Fl::event_x()-x(), Fl::event_y()-y());
-               char s[128];
-               sprintf(s,"x=%g, y=%g, z=%g",p.x,p.y,p.z);
-               draw(); fl_color(FL_BLACK);             fl_draw(s,40,70);
+               mglCanvasWnd *g=dynamic_cast<mglCanvasWnd *>(gr);
+               if(g && g->ClickFunc)   g->ClickFunc(draw_par);
+               if(gr->get(MGL_SHOW_POS))
+               {
+                       mglPoint p = gr->CalcXYZ(Fl::event_x()-x(), Fl::event_y()-y());
+                       if(g)   g->LastMousePos = p;
+                       char s[128];
+                       sprintf(s,"x=%g, y=%g, z=%g",p.x,p.y,p.z);
+                       draw(); fl_color(FL_BLACK);             fl_draw(s,40,70);
+               }
        }
        else if((!rotate && !zoom) || Fl::event_button()!=FL_LEFT_MOUSE)
        {
index 1c983efa5f25a5cf263ef9f4a598473229879c19..8d27c466f7ee4075ecb019637cda81dd61aafed1 100644 (file)
@@ -230,8 +230,12 @@ void QMathGL::mousePressEvent(QMouseEvent *ev)
        if(!zoom && !rotate && ev->button()&Qt::LeftButton)
        {
                mglPoint p = gr->CalcXYZ(ev->x(), ev->y());
+               mglCanvasWnd *g=dynamic_cast<mglCanvasWnd *>(gr);
+               if(g)   g->LastMousePos = p;
                mousePos.sprintf("x=%g, y=%g, z=%g",p.x,p.y,p.z);
                repaint();
+
+               if(g && g->ClickFunc)   g->ClickFunc(draw_par);
                emit mouseClick(p.x,p.y,p.z);
                emit posChanged(mousePos);
                emit objChanged(gr->GetObjId(ev->x(),ev->y())-1);
@@ -434,7 +438,7 @@ void QMathGL::exportSTL(QString fname)
        }
 }
 //-----------------------------------------------------------------------------
-void QMathGL::exportX3D(QString fname)
+/*void QMathGL::exportX3D(QString fname)
 {
        if(fname.isEmpty())     fname = gr->PlotId.c_str();
        if(fname.isEmpty())     QMessageBox::critical(this, appName, tr("No filename."),QMessageBox::Ok,0,0);
@@ -444,7 +448,7 @@ void QMathGL::exportX3D(QString fname)
                mgl_write_x3d(gr,setExtension(fname,"svg").toAscii(), appName.toAscii());
                setlocale(LC_NUMERIC, "");
        }
-}
+}*/
 //-----------------------------------------------------------------------------
 void QMathGL::exportTGA(QString fname)
 {
index 61a9e7b4857f4599b4a03499734f7b5baa0ca8dc..203542a5f6ccd21f37d635e582cd4cf330b89d8c 100644 (file)
@@ -116,6 +116,8 @@ void mgl_wnd_animation(HMGL gr)
 {      mglCanvasWnd *g = dynamic_cast<mglCanvasWnd *>(gr);     if(g)   g->Animation(); }\r
 void mgl_setup_window(HMGL gr, int clf_upd, int showpos)\r
 {      mglCanvasWnd *g = dynamic_cast<mglCanvasWnd *>(gr);     if(g)   g->Setup(clf_upd, showpos);     }\r
+void mgl_set_click_func(HMGL gr, void (*func)(void *p))\r
+{      mglCanvasWnd *g = dynamic_cast<mglCanvasWnd *>(gr);     if(g)   g->ClickFunc = func;    }\r
 //-----------------------------------------------------------------------------\r
 void mgl_wnd_toggle_alpha_(uintptr_t *gr)\r
 {      mglCanvasWnd *g = dynamic_cast<mglCanvasWnd *>((HMGL)(*gr));\r
@@ -208,17 +210,15 @@ int mgl_qt_run_() {       return mgl_qt_run();    }
 //     mglDraw class handling\r
 //\r
 //-----------------------------------------------------------------------------\r
-int mgl_draw_class(mglBase *gr, void *p)\r
+int mgl_draw_class(mglBase *gr, void *p)       // so stupid way to save mglDraw class inheritance :(\r
 {\r
-       mglGraph g(gr);\r
-       mglWindow *w = (mglWindow *)p;  // so stupid way to save mglDraw class inheritance :(\r
+       mglGraph g(gr); mglWindow *w = (mglWindow *)p;\r
        return (w && w->dr) ? w->dr->Draw(&g) : 0;\r
 }\r
-void mgl_reload_class(void *p)\r
-{\r
-       mglWindow *w = (mglWindow *)p;  // so stupid way to save mglDraw class inheritance :(\r
-       if(w && w->dr)  w->dr->Reload();\r
-}\r
+void mgl_reload_class(void *p) // so stupid way to save mglDraw class inheritance :(\r
+{      mglWindow *w = (mglWindow *)p;  if(w && w->dr)  w->dr->Reload();}\r
+void mgl_click_class(void *p)  // so stupid way to save mglDraw class inheritance :(\r
+{      mglWindow *w = (mglWindow *)p;  if(w && w->dr)  w->dr->Click(); }\r
 //-----------------------------------------------------------------------------\r
 int mgl_draw_graph(mglBase *gr, void *p)\r
 {\r